Analisi dell'innalzamento del livello dei mari¶

Davide Giardini - Progetto di "Big Data in Geographic Information Systems", anno accademico 2022-2023¶

L'argomento dell'innalzamento del livello dei mari è da tempo affrontato dall'opinione pubblica, parzialmente a causa del sempre maggiore interessamento verso le tematiche legate al riscaldamento globale, ma in particolare anche per i potenziali effetti che questo fenomeno potrebbe avere sulle aree costiere. Le cause che più spesso vengono attribuite all'innalzamento della superficie degli oceani sono lo scoglimento dei ghiacciai e l'espansione dell'acqua dovuta all'aumento della sua temperatura.
Andremo quindi a esplorare tre diversi modelli: uno sul livello della superficie del mare, uno sulla temperatura dell'acqua e un'ultimo sull'area coperta dai ghiacciai. Lo scopo finale sarà quello di valutare la correlazione e, possibilmente, la causazione delle ultime due variabili sulla prima.

Operazioni preliminari sui modelli singoli¶

In [1]:
# Import libraries
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns

import cartopy.crs as ccrs

import xarray as xr
import nc_time_axis

import numpy as np
import pandas as pd

Modello 1 - Sea Conservative Temperature¶

La temperatura conservativa è una proprietà termodinamica dell'acqua di mare. È derivata dall'entalpia potenziale ed è raccomandata secondo lo standard TEOS-10 in sostituzione della temperatura potenziale poiché rappresenta in modo più accurato il contenuto di calore nell'oceano.

Per questa variabile utilizziamo il modello "CMIP6.CMIP.CNRM-CERFACS.CNRM-CM6-1.historical" disponibile qui.
Il modello è stato costruito a seguito del progetto: "Voldoire, Aurore (2018). CMIP6 simulations of the CNRM-CERFACS based on CNRM-CM6-1 model for CMIP experiment historical".

In [2]:
# Apro ed esploro il modello 1
modfile1 = 'C:/Users/david/Desktop/GeoData/Project/bigthetaoga_Omon_CNRM-CM6-1_historical_r17i1p1f2_gn_185001-201412.nc'
d1 = xr.open_dataset(modfile1)
d1
Out[2]:
<xarray.Dataset>
Dimensions:      (time: 1980, axis_nbounds: 2)
Coordinates:
    sector       |S255 b'global'
  * time         (time) datetime64[ns] 1850-01-16T12:00:00 ... 2014-12-16T12:...
Dimensions without coordinates: axis_nbounds
Data variables:
    time_bounds  (time, axis_nbounds) datetime64[ns] 1850-01-01 ... 2015-01-01
    bigthetaoga  (time) float32 3.954 3.957 3.958 3.958 ... 4.039 4.041 4.044
Attributes: (12/51)
    Conventions:            CF-1.7 CMIP-6.2
    creation_date:          2019-07-15T09:30:04Z
    description:            CMIP6 historical
    title:                  CNRM-CM6-1 model output prepared for CMIP6 / CMIP...
    activity_id:            CMIP
    contact:                [email protected]
    ...                     ...
    xios_commit:            1442-shuffle
    nemo_gelato_commit:     49095b3accd5d4c_6524fe19b00467a
    arpege_minor_version:   6.3.2
    parent_variant_label:   r1i1p1f2
    history:                none
    tracking_id:            hdl:21.14100/84a180f0-104e-4149-aa29-1c2bc876b254
xarray.Dataset
    • time: 1980
    • axis_nbounds: 2
    • sector
      ()
      |S255
      ...
      name :
      sector
      standard_name :
      region
      array(b'global', dtype='|S255')
    • time
      (time)
      datetime64[ns]
      1850-01-16T12:00:00 ... 2014-12-...
      axis :
      T
      standard_name :
      time
      long_name :
      Time axis
      time_origin :
      1850-01-01 00:00:00
      bounds :
      time_bounds
      array(['1850-01-16T12:00:00.000000000', '1850-02-15T00:00:00.000000000',
             '1850-03-16T12:00:00.000000000', ..., '2014-10-16T12:00:00.000000000',
             '2014-11-16T00:00:00.000000000', '2014-12-16T12:00:00.000000000'],
            dtype='datetime64[ns]')
    • time_bounds
      (time, axis_nbounds)
      datetime64[ns]
      ...
      array([['1850-01-01T00:00:00.000000000', '1850-02-01T00:00:00.000000000'],
             ['1850-02-01T00:00:00.000000000', '1850-03-01T00:00:00.000000000'],
             ['1850-03-01T00:00:00.000000000', '1850-04-01T00:00:00.000000000'],
             ...,
             ['2014-10-01T00:00:00.000000000', '2014-11-01T00:00:00.000000000'],
             ['2014-11-01T00:00:00.000000000', '2014-12-01T00:00:00.000000000'],
             ['2014-12-01T00:00:00.000000000', '2015-01-01T00:00:00.000000000']],
            dtype='datetime64[ns]')
    • bigthetaoga
      (time)
      float32
      ...
      standard_name :
      sea_water_conservative_temperature
      long_name :
      Global Average Sea Water Conservative Temperature
      units :
      degC
      online_operation :
      average
      cell_methods :
      area: mean where sea time: mean
      interval_operation :
      1800 s
      interval_write :
      1 month
      description :
      Diagnostic should be contributed only for models using conservative temperature as prognostic field.
      history :
      none
      array([3.954227, 3.956635, 3.958156, ..., 4.038894, 4.041449, 4.043603],
            dtype=float32)
  • Conventions :
    CF-1.7 CMIP-6.2
    creation_date :
    2019-07-15T09:30:04Z
    description :
    CMIP6 historical
    title :
    CNRM-CM6-1 model output prepared for CMIP6 / CMIP historical
    activity_id :
    CMIP
    contact :
    [email protected]
    data_specs_version :
    01.00.21
    dr2xml_version :
    1.13
    experiment_id :
    historical
    experiment :
    all-forcing simulation of the recent past
    forcing_index :
    2
    frequency :
    mon
    further_info_url :
    https://furtherinfo.es-doc.org/CMIP6.CNRM-CERFACS.CNRM-CM6-1.historical.none.r17i1p1f2
    grid :
    native ocean tri-polar grid with 105 k ocean cells
    grid_label :
    gn
    nominal_resolution :
    100 km
    initialization_index :
    1
    institution_id :
    CNRM-CERFACS
    institution :
    CNRM (Centre National de Recherches Meteorologiques, Toulouse 31057, France), CERFACS (Centre Europeen de Recherche et de Formation Avancee en Calcul Scientifique, Toulouse 31057, France)
    license :
    CMIP6 model data produced by CNRM-CERFACS is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (https://creativecommons.org/licenses). Consult https://pcmdi.llnl.gov/CMIP6/TermsOfUse for terms of use governing CMIP6 output, including citation requirements and proper acknowledgment. Further information about this data, including some limitations, can be found via the further_info_url (recorded as a global attribute in this file) and at http://www.umr-cnrm.fr/cmip6/. The data producers and data providers make no warranty, either express or implied, including, but not limited to, warranties of merchantability and fitness for a particular purpose. All liabilities arising from the supply of the information (including any liability arising in negligence) are excluded to the fullest extent permitted by law.
    mip_era :
    CMIP6
    parent_experiment_id :
    piControl
    parent_mip_era :
    CMIP6
    parent_activity_id :
    CMIP
    parent_source_id :
    CNRM-CM6-1
    parent_time_units :
    days since 1850-01-01 00:00:00
    branch_method :
    standard
    branch_time_in_parent :
    285619.0
    branch_time_in_child :
    0.0
    physics_index :
    1
    product :
    model-output
    realization_index :
    17
    realm :
    ocean
    references :
    http://www.umr-cnrm.fr/cmip6/references
    source :
    CNRM-CM6-1 (2017): aerosol: prescribed monthly fields computed by TACTIC_v2 scheme atmos: Arpege 6.3 (T127; Gaussian Reduced with 24572 grid points in total distributed over 128 latitude circles (with 256 grid points per latitude circle between 30degN and 30degS reducing to 20 grid points per latitude circle at 88.9degN and 88.9degS); 91 levels; top level 78.4 km) atmosChem: OZL_v2 land: Surfex 8.0c ocean: Nemo 3.6 (eORCA1, tripolar primarily 1deg; 362 x 294 longitude/latitude; 75 levels; top grid cell 0-1 m) seaIce: Gelato 6.1
    source_id :
    CNRM-CM6-1
    source_type :
    AOGCM
    sub_experiment_id :
    none
    sub_experiment :
    none
    table_id :
    Omon
    variable_id :
    bigthetaoga
    variant_label :
    r17i1p1f2
    EXPID :
    CNRM-CM6-1_historical_r17i1p1f2
    CMIP6_CV_version :
    cv=6.2.3.0-7-g2019642
    dr2xml_md5sum :
    92ddb3d0d8ce79f498d792fc8e559dcf
    xios_commit :
    1442-shuffle
    nemo_gelato_commit :
    49095b3accd5d4c_6524fe19b00467a
    arpege_minor_version :
    6.3.2
    parent_variant_label :
    r1i1p1f2
    history :
    none
    tracking_id :
    hdl:21.14100/84a180f0-104e-4149-aa29-1c2bc876b254

Analisi della Serie Storica mensile¶

Per poter decomporre la serie storica mensile nelle sue tre componenti (trend, stagionalità e residui) dobbiamo apportare delle modifiche alla struttura dei dati in modo che possano essere passati alla funzione "seasonal_decompose" della libreria "statsmodels".

In [3]:
# Trasformiamo i dati in dataframe
ts_bigthetaoga = d1.drop_vars('time_bounds').to_dataframe()['bigthetaoga'].to_frame()
In [4]:
# Aggiungiamo un indice temporale identico alla variabile "time" già presente nel modello, ma che possa essere interpretato
# dalla funzione di decomposizione
ts_bigthetaoga['month'] = pd.to_datetime(pd.date_range('1850-01', '2015-01', freq='M'))
ts_bigthetaoga = ts_bigthetaoga.set_index('month')

La funzione seasonal_decompose ci permette di decidere tra i due tipi di decomposizione (additivo e multiplicativo) tramite l'opzione "model". La scelta del modello è determinata dall'analisi dei residui: cerchiamo il modello che risulti in residui con range minore, varianza costante, e che non presentino pattern.

In [5]:
from statsmodels.tsa.seasonal import seasonal_decompose
from dateutil.parser import parse

# Additive Decomposition 
bigthetaoga_decom = seasonal_decompose(ts_bigthetaoga.bigthetaoga, model='additive', extrapolate_trend='freq')

# Plot
plt.rcParams.update({'figure.figsize': (10, 10)})
bigthetaoga_decom.plot()
plt.show()

Ci concentriamo ora sulla stagionalità annuale:

In [6]:
plt.rcParams.update({'figure.figsize': (9, 5)})
bigthetaoga_decom.seasonal.groupby(bigthetaoga_decom.seasonal.index.month).mean().plot()
plt.title("Seasonal Component of Global Average Sea Water Conservative Temperature")
plt.show()

La temperatura conservativa media globale del mare presenta una ben determinata componente stagionale. Questa presenta un picco in corrispondenza del mese di Aprile e un minimo in corrispondenza di quello di Settembre.
La variazione però è relativamente contenuta: 0.012 gradi attorno al trend.

Rimozione della Componente Stagionale¶

Andiamo ora a isolare il trend, rimuovendo quindi la componente stagionale, calcolando una media annuale della temperatura.

In [7]:
d1= d1.resample(time="Y").mean()
In [8]:
plt.rcParams.update({'figure.figsize': (9, 5)})
d1.bigthetaoga.plot()
plt.title("Global Average Sea Water Conservative Temperature")
plt.show()

Il grafico risultante ci dimostra un trend decisamente crescente, che è cresciuto, dal 1850 al 2014 di 0.09 gradi. Il grafico sembra anche mostrare un'accellerazione di questo trend dagli anni 1960.

Modello 2 - Sea Surface Height Above Geoid¶

Per valutare l'innalzamento del livello dei mari utilizziamo la variabile "zos": "Sea Surface Height Above Geoid". Come dice il nome, la variabile calcola la distanza verticale della superficie oceaninca da una superficie di riferimento, che in questo caso è il geoide. Il geoide è una superficie di geopotenziale costante, con la quale il livello del mare dovrebbe coincirdere se gli oceani fossero a "riposo". Fonte: NVS.

Per questa variabile utilizziamo il modello "zos_Omon_BCC-CSM2-MR_esm-hist" disponibile qui.
Il modello è stato costruito a seguito del progetto: "Wu, Tongwen; Chu, Min; et al. (2018). BCC BCC-CSM2MR model output prepared for CMIP6 CMIP esm-hist.".

In [9]:
# Apro ed esploro il modello 2
modfile2 = 'C:/Users/david/Desktop/GeoData/Project/zos_Omon_BCC-CSM2-MR_esm-hist_r1i1p1f1_gn_185001-201412.nc'
d2 = xr.open_dataset(modfile2)
d2
Out[9]:
<xarray.Dataset>
Dimensions:    (time: 1980, bnds: 2, lat: 232, lon: 360)
Coordinates:
  * time       (time) object 1850-01-16 12:00:00 ... 2014-12-16 12:00:00
  * lat        (lat) float64 -81.5 -80.5 -79.5 -78.5 ... 86.5 87.5 88.5 89.5
  * lon        (lon) float64 0.5 1.5 2.5 3.5 4.5 ... 356.5 357.5 358.5 359.5
    latitude   (lat, lon) float32 -81.5 -81.5 -81.5 -81.5 ... 88.26 88.05 87.83
    longitude  (lat, lon) float32 0.5 1.5 2.5 3.5 ... 60.95 63.36 65.25 66.77
Dimensions without coordinates: bnds
Data variables:
    time_bnds  (time, bnds) object 1850-01-01 00:00:00 ... 2015-01-01 00:00:00
    lat_bnds   (lat, bnds) float64 -81.5 -81.0 -81.0 -80.0 ... 89.0 89.0 89.5
    lon_bnds   (lon, bnds) float64 0.0 1.0 1.0 2.0 ... 358.0 359.0 359.0 360.0
    zos        (time, lat, lon) float32 ...
Attributes: (12/49)
    Conventions:            CF-1.7 CMIP-6.2
    activity_id:            CMIP
    branch_method:          Standard
    branch_time_in_child:   0.0
    branch_time_in_parent:  2145.0
    comment:                The model integration starts from the esm-piContr...
    ...                     ...
    title:                  BCC-CSM2-MR output prepared for CMIP6
    tracking_id:            hdl:21.14100/d97c7956-1712-409f-a7ca-58d4b42c929b
    variable_id:            zos
    variant_label:          r1i1p1f1
    license:                CMIP6 model data produced by BCC is licensed unde...
    cmor_version:           3.3.2
xarray.Dataset
    • time: 1980
    • bnds: 2
    • lat: 232
    • lon: 360
    • time
      (time)
      object
      1850-01-16 12:00:00 ... 2014-12-...
      bounds :
      time_bnds
      axis :
      T
      long_name :
      time
      standard_name :
      time
      array([cftime.DatetimeNoLeap(1850, 1, 16, 12, 0, 0, 0, has_year_zero=True),
             cftime.DatetimeNoLeap(1850, 2, 15, 0, 0, 0, 0, has_year_zero=True),
             cftime.DatetimeNoLeap(1850, 3, 16, 12, 0, 0, 0, has_year_zero=True),
             ...,
             cftime.DatetimeNoLeap(2014, 10, 16, 12, 0, 0, 0, has_year_zero=True),
             cftime.DatetimeNoLeap(2014, 11, 16, 0, 0, 0, 0, has_year_zero=True),
             cftime.DatetimeNoLeap(2014, 12, 16, 12, 0, 0, 0, has_year_zero=True)],
            dtype=object)
    • lat
      (lat)
      float64
      -81.5 -80.5 -79.5 ... 88.5 89.5
      bounds :
      lat_bnds
      units :
      degrees_north
      axis :
      Y
      long_name :
      latitude
      standard_name :
      latitude
      array([-81.5, -80.5, -79.5, ...,  87.5,  88.5,  89.5])
    • lon
      (lon)
      float64
      0.5 1.5 2.5 ... 357.5 358.5 359.5
      bounds :
      lon_bnds
      units :
      degrees_east
      axis :
      X
      long_name :
      Longitude
      standard_name :
      longitude
      array([  0.5,   1.5,   2.5, ..., 357.5, 358.5, 359.5])
    • latitude
      (lat, lon)
      float32
      ...
      standard_name :
      latitude
      long_name :
      latitude
      units :
      degrees_north
      array([[-81.5     , -81.5     , -81.5     , ..., -81.5     , -81.5     ,
              -81.5     ],
             [-80.5     , -80.5     , -80.5     , ..., -80.5     , -80.5     ,
              -80.5     ],
             [-79.5     , -79.5     , -79.5     , ..., -79.5     , -79.5     ,
              -79.5     ],
             ...,
             [ 86.58047 ,  86.42422 ,  86.26085 , ...,  86.996666,  86.867805,
               86.72868 ],
             [ 87.225815,  87.03524 ,  86.840004, ...,  87.75915 ,  87.589096,
               87.41082 ],
             [ 87.61307 ,  87.39397 ,  87.17378 , ...,  88.2616  ,  88.04723 ,
               87.83092 ]], dtype=float32)
    • longitude
      (lat, lon)
      float32
      ...
      standard_name :
      longitude
      long_name :
      longitude
      units :
      degrees_east
      array([[ 0.5     ,  1.5     ,  2.5     , ..., -2.5     , -1.5     , -0.5     ],
             [ 0.5     ,  1.5     ,  2.5     , ..., -2.5     , -1.5     , -0.5     ],
             [ 0.5     ,  1.5     ,  2.5     , ..., -2.5     , -1.5     , -0.5     ],
             ...,
             [33.550873, 36.22115 , 38.67141 , ..., 24.030403, 27.47284 , 30.640976],
             [47.585346, 49.95292 , 52.038475, ..., 38.205967, 41.781086, 44.88261 ],
             [68.01373 , 69.05388 , 69.93538 , ..., 63.359528, 65.24949 , 66.76796 ]],
            dtype=float32)
    • time_bnds
      (time, bnds)
      object
      ...
      array([[cftime.DatetimeNoLeap(1850, 1, 1, 0, 0, 0, 0, has_year_zero=True),
              cftime.DatetimeNoLeap(1850, 2, 1, 0, 0, 0, 0, has_year_zero=True)],
             [cftime.DatetimeNoLeap(1850, 2, 1, 0, 0, 0, 0, has_year_zero=True),
              cftime.DatetimeNoLeap(1850, 3, 1, 0, 0, 0, 0, has_year_zero=True)],
             [cftime.DatetimeNoLeap(1850, 3, 1, 0, 0, 0, 0, has_year_zero=True),
              cftime.DatetimeNoLeap(1850, 4, 1, 0, 0, 0, 0, has_year_zero=True)],
             ...,
             [cftime.DatetimeNoLeap(2014, 10, 1, 0, 0, 0, 0, has_year_zero=True),
              cftime.DatetimeNoLeap(2014, 11, 1, 0, 0, 0, 0, has_year_zero=True)],
             [cftime.DatetimeNoLeap(2014, 11, 1, 0, 0, 0, 0, has_year_zero=True),
              cftime.DatetimeNoLeap(2014, 12, 1, 0, 0, 0, 0, has_year_zero=True)],
             [cftime.DatetimeNoLeap(2014, 12, 1, 0, 0, 0, 0, has_year_zero=True),
              cftime.DatetimeNoLeap(2015, 1, 1, 0, 0, 0, 0, has_year_zero=True)]],
            dtype=object)
    • lat_bnds
      (lat, bnds)
      float64
      ...
      array([[-81.5, -81. ],
             [-81. , -80. ],
             [-80. , -79. ],
             ...,
             [ 87. ,  88. ],
             [ 88. ,  89. ],
             [ 89. ,  89.5]])
    • lon_bnds
      (lon, bnds)
      float64
      ...
      array([[  0.,   1.],
             [  1.,   2.],
             [  2.,   3.],
             ...,
             [357., 358.],
             [358., 359.],
             [359., 360.]])
    • zos
      (time, lat, lon)
      float32
      ...
      standard_name :
      sea_surface_height_above_geoid
      long_name :
      Sea Surface Height Above Geoid
      comment :
      This is the dynamic sea level, so should have zero global area mean. It should not include inverse barometer depressions from sea ice.
      units :
      m
      original_name :
      zos
      cell_methods :
      area: mean where sea time: mean (interval: 30 minutes)
      cell_measures :
      area: areacello
      [165369600 values with dtype=float32]
  • Conventions :
    CF-1.7 CMIP-6.2
    activity_id :
    CMIP
    branch_method :
    Standard
    branch_time_in_child :
    0.0
    branch_time_in_parent :
    2145.0
    comment :
    The model integration starts from the esm-piControl experiment equilibrium state (1st Jan. of the year 2145)
    contact :
    Dr. Tongwen Wu([email protected])
    creation_date :
    2019-04-29T07:16:43Z
    data_specs_version :
    01.00.27
    description :
    DECK: esm-historical
    experiment :
    all-forcing simulation of the recent past with atmospheric CO2 concentration calculated
    experiment_id :
    esm-hist
    external_variables :
    areacello
    forcing_index :
    1
    frequency :
    mon
    further_info_url :
    https://furtherinfo.es-doc.org/CMIP6.BCC.BCC-CSM2-MR.esm-hist.none.r1i1p1f1
    grid :
    native ocean tri-polar grid
    grid_label :
    gn
    history :
    2019-04-29T07:16:43Z ; CMOR rewrote data to be consistent with CMIP6, CF-1.7 CMIP-6.2 and CF standards.; N/A
    initialization_index :
    1
    institution :
    Beijing Climate Center, Beijing 100081, China
    institution_id :
    BCC
    mip_era :
    CMIP6
    nominal_resolution :
    100 km
    parent_activity_id :
    CMIP
    parent_experiment_id :
    esm-piControl
    parent_mip_era :
    CMIP6
    parent_source_id :
    BCC-CSM2-MR
    parent_time_units :
    days since 1850-01-01
    parent_variant_label :
    r1i1p1f1
    physics_index :
    1
    product :
    model-output
    realization_index :
    1
    realm :
    ocean
    references :
    Model described by Tongwen Wu et al. (JGR 2013; JMR 2014; submmitted to GMD,2018). Also see http://forecast.bcccsm.ncc-cma.net/htm
    run_variant :
    forcing: greenhouse gases,solar constant,aerosol,volcano mass,land use,ozone
    source :
    BCC-CSM 2 MR (2017): aerosol: none atmos: BCC_AGCM3_MR (T106; 320 x 160 longitude/latitude; 46 levels; top level 1.46 hPa) atmosChem: none land: BCC_AVIM2 landIce: none ocean: MOM4 (1/3 deg 10S-10N, 1/3-1 deg 10-30 N/S, and 1 deg in high latitudes; 360 x 232 longitude/latitude; 40 levels; top grid cell 0-10 m) ocnBgchem: none seaIce: SIS2
    source_id :
    BCC-CSM2-MR
    source_type :
    AOGCM BGC
    sub_experiment :
    none
    sub_experiment_id :
    none
    table_id :
    Omon
    table_info :
    Creation Date:(30 July 2018) MD5:e53ff52009d0b97d9d867dc12b6096c7
    title :
    BCC-CSM2-MR output prepared for CMIP6
    tracking_id :
    hdl:21.14100/d97c7956-1712-409f-a7ca-58d4b42c929b
    variable_id :
    zos
    variant_label :
    r1i1p1f1
    license :
    CMIP6 model data produced by BCC is licensed under a Creative Commons Attribution ShareAlike 4.0 International License (https://creativecommons.org/licenses). Consult https://pcmdi.llnl.gov/CMIP6/TermsOfUse for terms of use governing CMIP6 output, including citation requirements and proper acknowledgment. Further information about this data, including some limitations, can be found via the further_info_url (recorded as a global attribute in this file) and at https:///pcmdi.llnl.gov/. The data producers and data providers make no warranty, either express or implied, including, but not limited to, warranties of merchantability and fitness for a particular purpose. All liabilities arising from the supply of the information (including any liability arising in negligence) are excluded to the fullest extent permitted by law.
    cmor_version :
    3.3.2

Analisi Geografica¶

Ci concentriamo prima su un'analisi geografica. Andiamo a plottare l'altezza media del mare sopra al geoide.

In [10]:
# Situazione media
plt.rcParams.update({'figure.figsize': (8, 5)})
p0 = d2.zos.mean(dim='time').plot(transform=ccrs.PlateCarree(),
                            subplot_kws={'projection': ccrs.Robinson()})
plt.title("Average Sea Surface Height Above Geoid through time")
p0.axes.coastlines()
plt.show()

Dal grafico risultante notiamo come l'area in cui l'altezza media del mare tende ad essere superiore a quella del geoide si addensa intorno all'equatore, mentre ai poli l'altezza media del mare tende ad essere inferiore.

Andiamo ora a verificare se sono avvenuti cambiamenti durante gli anni: costruiamo una mappa che mostri le differenze tra i primi 20 anni di osservazioni (1950-1979) agli ultimi anni (1995-2005). Le aree in rosso andranno a indicare i punti in cui il livello del mare è aumentato maggiormente, al contrario quelle in blu corrisponderanno con i punti in cui il livello del mare è diminuito.

In [11]:
# Analisi delle differenze tra i primi 20 anni e gli ultimi 20 anni
plt.rcParams.update({'figure.figsize': (8, 5)})
Anom = d2.sel(time=slice('1995-01-01', '2015-01-01')).mean(dim='time') - d2.sel(time=slice('1850-01-01', '1870-01-01')).mean(dim='time')
p0 = Anom.zos.plot(transform=ccrs.PlateCarree(), subplot_kws={'projection': ccrs.Robinson()})
plt.title("Anomalies of Sea Surface Height Above Geoid \n between first and last 20 years")
p0.axes.coastlines()
plt.show()

Il grafico risultante è quasi per la totalità di colore rosso, dimostrando un aumento generale del livello dei mari.
L'unica area che ha dimostrato un abbassamento dei livelli del mare è quella nelle prossimità dell'Antartide. Al contrario, a latitudini appena superiori a questa fascia di colore blu, risiede la zona corrispondente al maggiore innalzamento dei livelli dei mari (constrassegnata dal rosso più intenso).

Dall'analisi grafica notiamo anche che il modello sembra presentare degli artefatti, soprattutto in relazione del Polo Nord. Le coordinate descritte nel modello non sembrano combaciare bene con quelle delle funzioni di plot. Vari tentantativi per risolvere il problema sono stati fatti, ma senza successo.
Considerando il nostro interesse verte su una serie storica della media globale della variabile stessa, e non su una meticolosa analisi geografica, abbiamo deciso di utilizzare comunque il modello.
Il problema si ripeterà con il modello successivo.

In [12]:
# Usiamo uno "slice" delle latitudini per permetterci di concentrarsi sul polo Nord
p1a = d2.zos.isel(time=0,lat=slice(210,233)).plot(transform=ccrs.PlateCarree(),
                subplot_kws={'projection': ccrs.Orthographic(central_longitude=0.0, central_latitude=90)},
                                                            cmap='Blues')
p1a.axes.coastlines()
Out[12]:
<cartopy.mpl.feature_artist.FeatureArtist at 0x1aa3e0032b0>

Costruzione Serie Storica Bilanciata¶

Per costruire la serie storica dobbiamo calcolare la media globale dell'altezza del livello del mare sopra al geoide. Per fare ciò dobbiamo ovviamente calcolare la media attraverso ogni cella. Dobbiamo però prima definire dei pesi in modo da rendere conto della diminuzione dell'area delle celle all'avvicinarsi verso i poli. In questo modo potremo calcolare una media pesata e raggiungere una serie storica più veritiera.

In [13]:
fig = plt.figure(figsize=(9,5))  
d2.zos.mean(axis=1).mean(axis=1).plot()
plt.title("Sea Surface Height Above Geoid prima del bilanciamento")
plt.ylabel("Sea Surface Height Above Geoid [m]")
plt.show()
In [14]:
# Costruzione di variabili utile rappresentanti le dimensioni dei dati
nmonths = len(d2.time)
nlat = len(d2.coords['lat'].values)
nlon = len(d2.coords['lon'].values)
In [15]:
# Definizione dei pesi in modo da tener conto della diminuzione dell'area coperta dalle celle all'avvicinarsi dei poli
weights = np.tile(np.cos(np.deg2rad(nlat)), (nlat,360))
In [16]:
# Costruzione di un array che possa contenere i dati mensili del modello
data_glob = np.empty([1, nmonths],dtype=float)
data_glob[:,:] = np.nan
In [17]:
# Costruzione di una maschera per rimuovere i valori nan (dati dalle celle corrispondenti a terre ferme)
masked_data = np.ma.masked_array(d2.isel(time=0).zos, np.isnan(d2.isel(time=0).zos))
In [18]:
# Loop sui mesi e calcolo della media pesata per il modello 2
for t in range(0,int(nmonths)):  
    masked_data = np.ma.masked_array(d2.isel(time=t).zos, np.isnan(d2.isel(time=0).zos))
    data_glob[0,t] = np.ma.average(masked_data,weights=weights)
In [19]:
# Costruzione della visualizzazione per il modello 2
fig = plt.figure(figsize=(9,5))  
plt.plot(pd.date_range('1850-01', '2015-01', freq='M'),data_glob[0])
plt.title("Sea Surface Height Above Geoid dopo del bilanciamento")
plt.ylabel("Sea Surface Height Above Geoid [m]")
plt.show()

Analisi della Serie Storica mensile¶

In [20]:
# Costruzione di un dataset idoneo all'utilizzo della funzione "seasonal_decompose"
ts_zos = pd.DataFrame(data_glob[0], columns=["zos"])
ts_zos['month'] = pd.to_datetime(pd.date_range('1850-01', '2015-01', freq='M'))
ts_zos = ts_zos.set_index('month')
In [21]:
# Additive Decomposition 
zos_decom = seasonal_decompose(ts_zos, model='additive', extrapolate_trend='freq')

# Plot
plt.rcParams.update({'figure.figsize': (10, 10)})
zos_decom.plot()
plt.show()

Ci concentriamo ancora una volta sulla componente stagionale mensile.

In [22]:
plt.rcParams.update({'figure.figsize': (9, 5)})
zos_decom.seasonal.groupby(zos_decom.seasonal.index.month).mean().plot()
plt.title("Seasonal Component of Global Average Sea Surface Height Above Geoid")
plt.ylabel("Sea Surface Height Above Geoid [m]")
plt.show()

La serie stagionale dell'altezza del livello dei mari presenta un andamento quasi completamente opposto di quella della temperatura conservativa. Essa infatti presenta un picco di 0.0015 nel mese di Settembre ed un minimo di -0.0022 ad Aprile.

Rimozione della Componente Stagionale¶

In [23]:
zos_year = [sum(data_glob[0][i:i+12])/12 for i in range(0,len(data_glob[0]),12)]
In [24]:
ts_zos = pd.DataFrame(zos_year, columns=["zos"])
ts_zos['year'] = pd.to_datetime(pd.date_range('1850-01', '2015-01', freq='Y'))
ts_zos = ts_zos.set_index('year')
In [25]:
plt.rcParams.update({'figure.figsize': (9, 5)})
ts_zos.plot(legend=False)
plt.title("Global Average Sea Surface Height Above Geoid")
plt.ylabel("Sea Surface Height Above Geoid [m]")
plt.show()

Dal precedente grafico, ottenuto applicando al modello una media annuale della variabile di riferimento, un trend positivo lineare che ha portato il livello del mare al di sopra del geoide da un minimo di 2.22 cm nel 1850 ad un massimo di 9.74 cm nel 2015.

Modello 3 - Ice Area¶

Per quanto riguarda lo scoglimento dei ghiacchiai, utilizziamo la variabile "simass", cioè la "massa totale di ghiaccio marino diviso per l'area della cella". Considerando che utilizzeremo, come proxy dello scoglimento del ghiaccio, la massa di ghiaccio totale, ci aspettiamo di avere correlazioni opposte a quanto sarebbe stato intuibile utiizzando una variabile che misurasse lo scoglimento. Ci aspettiamo insomma una correlazione negativa di questa variabile con le altre, considerando con una diminuzione dell'area del ghiaccio corrisponde a un maggiore scoglimento dello stesso.
Da notare anche che la variabile è già divisa per l'area della cella, per cui non consideriamo necessaria un'operazione di pesaggio nel momento del calcolo della media globale, come invece era stato per il modello 2.

Per questa variabile utilizziamo il modello "BCC-CSM2-MR_esm-hist" disponibile qui allo stello link del precedente.
Il modello è stato costruito a seguito dello stesso progetto del modello 2: "Wu, Tongwen; Chu, Min; et al. (2018). BCC BCC-CSM2MR model output prepared for CMIP6 CMIP esm-hist.".

In [26]:
# Apro il modello 3
modfile3 = 'C:/Users/david/Desktop/GeoData/Project/simass_SImon_BCC-CSM2-MR_esm-hist_r1i1p1f1_gn_185001-201412.nc'
d3 = xr.open_dataset(modfile3)
d3
Out[26]:
<xarray.Dataset>
Dimensions:    (time: 1980, bnds: 2, lat: 232, lon: 360)
Coordinates:
  * time       (time) object 1850-01-16 12:00:00 ... 2014-12-16 12:00:00
  * lat        (lat) float64 -81.5 -80.5 -79.5 -78.5 ... 86.5 87.5 88.5 89.5
  * lon        (lon) float64 0.5 1.5 2.5 3.5 4.5 ... 356.5 357.5 358.5 359.5
    latitude   (lat, lon) float32 -81.5 -81.5 -81.5 -81.5 ... 88.26 88.05 87.83
    longitude  (lat, lon) float32 0.5 1.5 2.5 3.5 ... 60.95 63.36 65.25 66.77
Dimensions without coordinates: bnds
Data variables:
    time_bnds  (time, bnds) object 1850-01-01 00:00:00 ... 2015-01-01 00:00:00
    lat_bnds   (lat, bnds) float64 -81.5 -81.0 -81.0 -80.0 ... 89.0 89.0 89.5
    lon_bnds   (lon, bnds) float64 0.0 1.0 1.0 2.0 ... 358.0 359.0 359.0 360.0
    simass     (time, lat, lon) float32 ...
Attributes: (12/49)
    Conventions:            CF-1.7 CMIP-6.2
    activity_id:            CMIP
    branch_method:          Standard
    branch_time_in_child:   0.0
    branch_time_in_parent:  2145.0
    comment:                The model integration starts from the esm-piContr...
    ...                     ...
    title:                  BCC-CSM2-MR output prepared for CMIP6
    tracking_id:            hdl:21.14100/04f7ca22-6892-418e-8dae-e386dea2dbc3
    variable_id:            simass
    variant_label:          r1i1p1f1
    license:                CMIP6 model data produced by BCC is licensed unde...
    cmor_version:           3.3.2
xarray.Dataset
    • time: 1980
    • bnds: 2
    • lat: 232
    • lon: 360
    • time
      (time)
      object
      1850-01-16 12:00:00 ... 2014-12-...
      bounds :
      time_bnds
      axis :
      T
      long_name :
      time
      standard_name :
      time
      array([cftime.DatetimeNoLeap(1850, 1, 16, 12, 0, 0, 0, has_year_zero=True),
             cftime.DatetimeNoLeap(1850, 2, 15, 0, 0, 0, 0, has_year_zero=True),
             cftime.DatetimeNoLeap(1850, 3, 16, 12, 0, 0, 0, has_year_zero=True),
             ...,
             cftime.DatetimeNoLeap(2014, 10, 16, 12, 0, 0, 0, has_year_zero=True),
             cftime.DatetimeNoLeap(2014, 11, 16, 0, 0, 0, 0, has_year_zero=True),
             cftime.DatetimeNoLeap(2014, 12, 16, 12, 0, 0, 0, has_year_zero=True)],
            dtype=object)
    • lat
      (lat)
      float64
      -81.5 -80.5 -79.5 ... 88.5 89.5
      bounds :
      lat_bnds
      units :
      degrees_north
      axis :
      Y
      long_name :
      latitude
      standard_name :
      latitude
      array([-81.5, -80.5, -79.5, ...,  87.5,  88.5,  89.5])
    • lon
      (lon)
      float64
      0.5 1.5 2.5 ... 357.5 358.5 359.5
      bounds :
      lon_bnds
      units :
      degrees_east
      axis :
      X
      long_name :
      Longitude
      standard_name :
      longitude
      array([  0.5,   1.5,   2.5, ..., 357.5, 358.5, 359.5])
    • latitude
      (lat, lon)
      float32
      ...
      standard_name :
      latitude
      long_name :
      latitude
      units :
      degrees_north
      array([[-81.5     , -81.5     , -81.5     , ..., -81.5     , -81.5     ,
              -81.5     ],
             [-80.5     , -80.5     , -80.5     , ..., -80.5     , -80.5     ,
              -80.5     ],
             [-79.5     , -79.5     , -79.5     , ..., -79.5     , -79.5     ,
              -79.5     ],
             ...,
             [ 86.58047 ,  86.42422 ,  86.26085 , ...,  86.996666,  86.867805,
               86.72868 ],
             [ 87.225815,  87.03524 ,  86.840004, ...,  87.75915 ,  87.589096,
               87.41082 ],
             [ 87.61307 ,  87.39397 ,  87.17378 , ...,  88.2616  ,  88.04723 ,
               87.83092 ]], dtype=float32)
    • longitude
      (lat, lon)
      float32
      ...
      standard_name :
      longitude
      long_name :
      longitude
      units :
      degrees_east
      array([[ 0.5     ,  1.5     ,  2.5     , ..., -2.5     , -1.5     , -0.5     ],
             [ 0.5     ,  1.5     ,  2.5     , ..., -2.5     , -1.5     , -0.5     ],
             [ 0.5     ,  1.5     ,  2.5     , ..., -2.5     , -1.5     , -0.5     ],
             ...,
             [33.550873, 36.22115 , 38.67141 , ..., 24.030403, 27.47284 , 30.640976],
             [47.585346, 49.95292 , 52.038475, ..., 38.205967, 41.781086, 44.88261 ],
             [68.01373 , 69.05388 , 69.93538 , ..., 63.359528, 65.24949 , 66.76796 ]],
            dtype=float32)
    • time_bnds
      (time, bnds)
      object
      ...
      array([[cftime.DatetimeNoLeap(1850, 1, 1, 0, 0, 0, 0, has_year_zero=True),
              cftime.DatetimeNoLeap(1850, 2, 1, 0, 0, 0, 0, has_year_zero=True)],
             [cftime.DatetimeNoLeap(1850, 2, 1, 0, 0, 0, 0, has_year_zero=True),
              cftime.DatetimeNoLeap(1850, 3, 1, 0, 0, 0, 0, has_year_zero=True)],
             [cftime.DatetimeNoLeap(1850, 3, 1, 0, 0, 0, 0, has_year_zero=True),
              cftime.DatetimeNoLeap(1850, 4, 1, 0, 0, 0, 0, has_year_zero=True)],
             ...,
             [cftime.DatetimeNoLeap(2014, 10, 1, 0, 0, 0, 0, has_year_zero=True),
              cftime.DatetimeNoLeap(2014, 11, 1, 0, 0, 0, 0, has_year_zero=True)],
             [cftime.DatetimeNoLeap(2014, 11, 1, 0, 0, 0, 0, has_year_zero=True),
              cftime.DatetimeNoLeap(2014, 12, 1, 0, 0, 0, 0, has_year_zero=True)],
             [cftime.DatetimeNoLeap(2014, 12, 1, 0, 0, 0, 0, has_year_zero=True),
              cftime.DatetimeNoLeap(2015, 1, 1, 0, 0, 0, 0, has_year_zero=True)]],
            dtype=object)
    • lat_bnds
      (lat, bnds)
      float64
      ...
      array([[-81.5, -81. ],
             [-81. , -80. ],
             [-80. , -79. ],
             ...,
             [ 87. ,  88. ],
             [ 88. ,  89. ],
             [ 89. ,  89.5]])
    • lon_bnds
      (lon, bnds)
      float64
      ...
      array([[  0.,   1.],
             [  1.,   2.],
             [  2.,   3.],
             ...,
             [357., 358.],
             [358., 359.],
             [359., 360.]])
    • simass
      (time, lat, lon)
      float32
      ...
      standard_name :
      sea_ice_amount
      long_name :
      Sea-ice mass per area
      comment :
      Total mass of sea ice divided by grid-cell area
      units :
      kg m-2
      original_name :
      MI
      cell_methods :
      area: time: mean (interval: 30 minutes)
      cell_measures :
      area: areacella
      [165369600 values with dtype=float32]
  • Conventions :
    CF-1.7 CMIP-6.2
    activity_id :
    CMIP
    branch_method :
    Standard
    branch_time_in_child :
    0.0
    branch_time_in_parent :
    2145.0
    comment :
    The model integration starts from the esm-piControl experiment equilibrium state (1st Jan. of the year 2145)
    contact :
    Dr. Tongwen Wu([email protected])
    creation_date :
    2018-12-11T07:26:18Z
    data_specs_version :
    01.00.27
    description :
    DECK: esm-historical
    experiment :
    all-forcing simulation of the recent past with atmospheric CO2 concentration calculated
    experiment_id :
    esm-hist
    external_variables :
    areacella
    forcing_index :
    1
    frequency :
    mon
    further_info_url :
    https://furtherinfo.es-doc.org/CMIP6.BCC.BCC-CSM2-MR.esm-hist.none.r1i1p1f1
    grid :
    native ocean tri-polar grid
    grid_label :
    gn
    history :
    2018-12-11T07:26:17Z ; CMOR rewrote data to be consistent with CMIP6, CF-1.7 CMIP-6.2 and CF standards.; N/A
    initialization_index :
    1
    institution :
    Beijing Climate Center, Beijing 100081, China
    institution_id :
    BCC
    mip_era :
    CMIP6
    nominal_resolution :
    100 km
    parent_activity_id :
    CMIP
    parent_experiment_id :
    esm-piControl
    parent_mip_era :
    CMIP6
    parent_source_id :
    BCC-CSM2-MR
    parent_time_units :
    days since 1850-01-01
    parent_variant_label :
    r1i1p1f1
    physics_index :
    1
    product :
    model-output
    realization_index :
    1
    realm :
    seaIce
    references :
    Model described by Tongwen Wu et al. (JGR 2013; JMR 2014; submmitted to GMD,2018). Also see http://forecast.bcccsm.ncc-cma.net/htm
    run_variant :
    forcing: greenhouse gases,solar constant,aerosol,volcano mass,land use,ozone
    source :
    BCC-CSM 2 MR (2017): aerosol: none atmos: BCC_AGCM3_MR (T106; 320 x 160 longitude/latitude; 46 levels; top level 1.46 hPa) atmosChem: none land: BCC_AVIM2 landIce: none ocean: MOM4 (1/3 deg 10S-10N, 1/3-1 deg 10-30 N/S, and 1 deg in high latitudes; 360 x 232 longitude/latitude; 40 levels; top grid cell 0-10 m) ocnBgchem: none seaIce: SIS2
    source_id :
    BCC-CSM2-MR
    source_type :
    AOGCM BGC
    sub_experiment :
    none
    sub_experiment_id :
    none
    table_id :
    SImon
    table_info :
    Creation Date:(30 July 2018) MD5:e53ff52009d0b97d9d867dc12b6096c7
    title :
    BCC-CSM2-MR output prepared for CMIP6
    tracking_id :
    hdl:21.14100/04f7ca22-6892-418e-8dae-e386dea2dbc3
    variable_id :
    simass
    variant_label :
    r1i1p1f1
    license :
    CMIP6 model data produced by BCC is licensed under a Creative Commons Attribution ShareAlike 4.0 International License (https://creativecommons.org/licenses). Consult https://pcmdi.llnl.gov/CMIP6/TermsOfUse for terms of use governing CMIP6 output, including citation requirements and proper acknowledgment. Further information about this data, including some limitations, can be found via the further_info_url (recorded as a global attribute in this file) and at https:///pcmdi.llnl.gov/. The data producers and data providers make no warranty, either express or implied, including, but not limited to, warranties of merchantability and fitness for a particular purpose. All liabilities arising from the supply of the information (including any liability arising in negligence) are excluded to the fullest extent permitted by law.
    cmor_version :
    3.3.2

Analisi Geografica¶

Per prima cosa effettuiamo un'analisi geografica della distribuzione della massa di ghiaccio. Senza alcuna sorpresa, notiamo che la maggior parte di essa è concentrata nel polo Nord, mentre un'altra parte si addensa intorno al contidente dell'Antartide.
Una cosa importante da fare per questa analisi geografica è porre un limite massimo allo span dei colori utilizzando l'opzione "vmax" della funzione "plot". Questo perché la distribuzione della massa di ghiaccio è fortemente assimmetrica: pochissime celle raggiungono valori molto alti. Se non usassimo questa opzione, lo span della legenda coprirebbe l'intero range dei valori, e così quasi tutto il grafico risulterebbe bianco.

In [27]:
plt.rcParams.update({'figure.figsize': (8, 5)})
p0 = d3.simass.mean(dim='time').plot(transform=ccrs.PlateCarree(), 
                                 subplot_kws={'projection': ccrs.Robinson()}, 
                                 cmap='Blues', vmax=1000)
plt.title("Average Total Mass of Sea Ice through time")
p0.axes.coastlines()
plt.show()

Come seconda cosa, invece, calcoliamo le anomalie tra i primi 20 anni e gli ultimi 20 anni di osservazioni, per poter analizzare i cambiamenti della distribuzione delle masse di ghiaccio. Il grafico sottostante, perciò, mostrerà in rosso le celle in cui l'area del ghiaccio è diminuita, e in blu le celle in cui essa è aumentata.

In [28]:
# Analisi delle differenze tra i primi 20 anni e gli ultimi 20 anni
plt.rcParams.update({'figure.figsize': (8, 5)})
Anom = d3.sel(time=slice('1995-01-01', '2015-01-01')).mean(dim='time') - d3.sel(time=slice('1850-01-01', '1870-01-01')).mean(dim='time')
p0 = Anom.simass.plot(transform=ccrs.PlateCarree(), subplot_kws={'projection': ccrs.Robinson()}, vmax=200, cmap = 'RdBu')
plt.title("Anomalies of Total Mass of Sea Ice \n between first and last 20 years")
p0.axes.coastlines()
plt.show()

Come ci aspettavamo, il grafico prende una colorazione quasi del tutto rossa, a indicazione di una generale diminuzione delle aree coperte dai ghiacciai globalmente. Ovviamente, le aree rosse si addensano ai due poli, in quanto, come abbiamo visto prima, sono le zone con più presenza di ghiacciai, e che hanno quindi subito una diminuzione maggiore.

Concentrandosi sull'area Antartica è interessante vedere come la differenza tra la quantità di ghiaccio presente nel mare sia notabile semplicemente plottando le due situazioni una a fianco all'altra, anche senza costruire un grafico che disegni le differenze tra i due periodi. I due grafici rappresentano la situazioni media dei primi e degli ultimi 10 anni.
È evidente una generale diminuzione dell'area dei ghiacciai nella regione attorno al continente antartico nell'ultimo periodo.

In [29]:
d3_sliced1 = d3.simass.isel(lat=slice(0,30)).sel(time=slice('1850-01-01', '1860-01-01')).mean(dim='time')
d3_sliced2 = d3.simass.isel(lat=slice(0,30)).sel(time=slice('2005-01-01', '2015-01-01')).mean(dim='time')
In [30]:
p1a = d3_sliced1.plot(transform=ccrs.PlateCarree(),
                      subplot_kws={'projection': ccrs.Orthographic(central_longitude=0.0, central_latitude=-90)},
                      cmap='Blues', vmax=500)
p1a.axes.coastlines()
Out[30]:
<cartopy.mpl.feature_artist.FeatureArtist at 0x1aa3ebe83d0>
In [31]:
p2a = d3_sliced2.plot(transform=ccrs.PlateCarree(),
                      subplot_kws={'projection': ccrs.Orthographic(central_longitude=0.0, central_latitude=-90)},
                      cmap='Blues', vmax=500)
p2a.axes.coastlines()
Out[31]:
<cartopy.mpl.feature_artist.FeatureArtist at 0x1aa3ea70580>

Analisi della Serie Storica mensile¶

In [32]:
ts_simass = d3.simass.mean(axis=1).mean(axis=1).to_dataframe()
In [33]:
ts_simass['month'] = pd.to_datetime(pd.date_range('1850-01', '2015-01', freq='M'))
ts_simass = ts_simass.set_index('month')
In [34]:
# Multiplicative Decomposition 
simass_decom = seasonal_decompose(ts_simass.simass, model='multiplicative', extrapolate_trend='freq')

# Plot
plt.rcParams.update({'figure.figsize': (10, 10)})
simass_decom.plot()
plt.show()
In [35]:
plt.rcParams.update({'figure.figsize': (9, 5)})
simass_decom.seasonal.groupby(simass_decom.seasonal.index.month).mean().plot()
plt.title("Seasonal Component of Sea-Ice mass per Area")
plt.show()

La serie stagionale della massa di ghiaccio presenta invece un andamento del tutto simile a quella della temperatura conservativa. Essa infatti presenta un picco di 1.364 kg/m2 nel mese di Maggio ed un minimo di 0.658 kg/m2 a Settembre.

Rimozione della componente Stagionale¶

In [36]:
d3= d3.resample(time="Y").mean()
In [37]:
plt.rcParams.update({'figure.figsize': (9, 5)})
d3.simass.mean(axis=1).mean(axis=1).plot()
plt.title("Global Average Sea Ice Area")
plt.show()

Fra le tre variabili presentate, la massa di ghiaccio è quella che presenta un trend meno netto se si considera l'intero span temporale. Quello che è molto visibile, però, è un trend decrescende partito dagli anni 1970 e ancora presente negli ultimi anni di osservazioni.

Confronto tra i 3 modelli¶

In [38]:
# Costruzione di un dataset che contenga tutte le variabili
ts_zos['bigthetaoga'] = d1.bigthetaoga.to_dataframe()['bigthetaoga']
ts_zos['simass'] = d3.simass.mean(axis=1).mean(axis=1)
ts_zos.head()
Out[38]:
zos bigthetaoga simass
year
1850-12-31 0.025079 3.952904 105.652702
1851-12-31 0.027067 3.954405 105.571953
1852-12-31 0.028324 3.955504 105.392555
1853-12-31 0.028730 3.955512 106.455231
1854-12-31 0.027566 3.956528 109.545181

Visualizzazione¶

In [39]:
# Costruzione di un dataset standardizzato per il plot
from sklearn.preprocessing import StandardScaler
ts_zosStd = pd.DataFrame(StandardScaler().fit_transform(ts_zos), columns=ts_zos.columns)
ts_zosStd = ts_zosStd.set_index(ts_zos.index)
In [40]:
plt.rcParams.update({'figure.figsize': (9, 5)})
ts_zosStd.plot()
plt.title("Confronto tra le serie storiche standardizzate delle tre variabili")
plt.show()

Standardizzando le tre variabili rendiamo possibile un confronto tramite una rappresentazione su grafico.
Le variabili "zos" (livello del mare rispetto al geoide) e "bigthetaoga" (temperatura conservativa del mare) sono visibilmente molto simili. Entrambe infatti seguono un trend positivo molto simile nella prima metà dello span temporale. Una differenza però si dimostra dagli anni 1960: mentre il trend della temperatura conservativa rimane lineare, quello della variabile di riferimento accellera, diventando quasi esponenziale.
La variabile relativa alla massa dei ghiacciai invece si dimostra la più diversa visivamente. Ciò è dovuto a, come accennato prima, la sua presunta correlazione negativa rispetto alle altre.

Calcolo della correlazione tra le variabili¶

In [41]:
ts_zos.corr()
Out[41]:
zos bigthetaoga simass
zos 1.000000 0.937414 -0.495248
bigthetaoga 0.937414 1.000000 -0.638905
simass -0.495248 -0.638905 1.000000

La matrice di correlazione porta buoni risultati: la nostra variabile di riferimento "zos" è correlata al 93.74% con la variabile "bigthetaoha" e al -49.52% con la variabile "simass". Possiamo visualizzare le informazioni contenute nella matrice tramite una heat-map:

In [42]:
# Build the corplot
plt.imshow(ts_zos.corr(), cmap = 'RdBu_r', interpolation='nearest', vmin=-1)
# Add legend
plt.colorbar()
# Create list with tick_mark positions
tick_marks = [i for i in range(len(ts_zos.columns))]
# Add the tickmarks at the designated position, using the labels of the dataframe
plt.xticks(tick_marks, ts_zos.columns, rotation='vertical')
plt.yticks(tick_marks, ts_zos.columns)
plt.title("Heat-Map della matrice delle correlazioni tra i tre modelli")
plt.show()

Granger Causality test¶

A questo punto, valutiamo la capacità previsiva delle serie storiche da noi costruite, per fare ciò utilizziamo il test di causalità di Granger. La causalità di Granger è un concetto espresso nel 1969 da Clive Granger e ampliato successivamente da Christopher Sims mirante a determinare una causalità tra le variabili espresse in un modello. Una serie storica $\{x_t\}_t$ causa (nel senso di Granger) una seconda serie storica $\{y_t\}_t$ se, condizionando rispetto ai valori passati di $x_t$, l’errore quadratico medio di previsione della $y+t$ risulta ridotto rispetto al caso in cui l’informazione dei valori passati di $𝑥𝑡$ sia ignorata. Formalmente: $$ E[y_t − E(y_t| \cdot) | y_{t-1}, y_{t−2}, … ; x_{t-1}, x_{t-2}, … ]^2 \le E[y_t − E(y_t| \cdot) | y_{t−1}, y_{t−2}, … ]^2 $$

In [43]:
from statsmodels.tsa.stattools import grangercausalitytests
In [44]:
test = grangercausalitytests(ts_zos[['zos','bigthetaoga']], 30, verbose=False)
for i in test:
    if test[i][0]['ssr_ftest'][1] < 0.05:
        print('found significant p-value at lag ' + str(i) + ': ' + str(round(test[i][0]['ssr_ftest'][1] , 3)))
In [45]:
test = grangercausalitytests(ts_zos[['zos','simass']], 30, verbose=False)
for i in test:
    if test[i][0]['ssr_ftest'][1] < 0.05:
        print('found significant p-value at lag ' + str(i) + ': ' + str(round(test[i][0]['ssr_ftest'][1] , 3)))

Il test di granger, però, non trova alcun valore significativo a nessun livello di ritardo per nessuna delle due variabili. Per questo motivo, nonostante le serie siano molto correlate, non possiamo dire che né la temperatura conservativa né l'area dei ghiacciai siano utili a prevedere l'innalzamento dei mari.

Aggiunta di un ultimo modello¶

Per determinare se gli scarsi risultati avuti dal Granger Test siano legati o meno al modello scelto abbiamo deciso di ripetere le analisi sostituendo il modello del "livello del mare rispetto al geoide" con la variabile "altezza del mare globale osservata".
Per fare ciò, utilizziamo il modello presente al seguente link sviluppato durante il seguente progetto: "Frederikse, T., Landerer, F., Caron, L. et al. The causes of sea-level rise since 1900. Nature 584, 393–397 (2020)" link

In [46]:
# Apro ed esploro il modello 4
modfile4 = 'C:/Users/david/Desktop/GeoData/Project/global_timeseries_measures.nc'
d4 = xr.open_dataset(modfile4)
d4
Out[46]:
<xarray.Dataset>
Dimensions:                                             (time: 119)
Coordinates:
  * time                                                (time) datetime64[ns] ...
Data variables: (12/21)
    global_average_sea_level_change                     (time) float32 -173.3...
    global_average_sea_level_change_upper               (time) float32 -141.0...
    global_average_sea_level_change_lower               (time) float32 -203.6...
    glac_mean                                           (time) float32 -79.55...
    glac_upper                                          (time) float32 -62.5 ...
    glac_lower                                          (time) float32 -95.5 ...
    ...                                                  ...
    global_average_thermosteric_sea_level_change        (time) float32 -48.28...
    global_average_thermosteric_sea_level_change_upper  (time) float32 -37.55...
    global_average_thermosteric_sea_level_change_lower  (time) float32 -58.67...
    sum_of_contrib_processes_mean                       (time) float32 -173.1...
    sum_of_contrib_processes_upper                      (time) float32 -146.8...
    sum_of_contrib_processes_lower                      (time) float32 -199.2...
Attributes: (12/42)
    title:                     Global sea-level changes and contributing proc...
    summary:                   This file contains reconstructed global-mean s...
    id:                        10.5067/GMSLT-FJPL1
    naming_authority:          gov.nasa.jpl
    source:                    Frederikse et al. The causes of sea-level rise...
    project:                   NASA sea-level change science team (N-SLCT)
    ...                        ...
    time_coverage_start:       1900-01-01
    time_coverage_end:         2018-12-31
    time_coverage_duration:    P119Y
    time_coverage_resolution:  P1Y
    date_created:              2020-07-28
    date_modified:             2020-09-14
xarray.Dataset
    • time: 119
    • time
      (time)
      datetime64[ns]
      1900-06-15 ... 2018-06-15
      long_name :
      time
      standard_name :
      time
      array(['1900-06-15T00:00:00.000000000', '1901-06-15T00:00:00.000000000',
             '1902-06-15T00:00:00.000000000', '1903-06-15T00:00:00.000000000',
             '1904-06-15T00:00:00.000000000', '1905-06-15T00:00:00.000000000',
             '1906-06-15T00:00:00.000000000', '1907-06-15T00:00:00.000000000',
             '1908-06-15T00:00:00.000000000', '1909-06-15T00:00:00.000000000',
             '1910-06-15T00:00:00.000000000', '1911-06-15T00:00:00.000000000',
             '1912-06-15T00:00:00.000000000', '1913-06-15T00:00:00.000000000',
             '1914-06-15T00:00:00.000000000', '1915-06-15T00:00:00.000000000',
             '1916-06-15T00:00:00.000000000', '1917-06-15T00:00:00.000000000',
             '1918-06-15T00:00:00.000000000', '1919-06-15T00:00:00.000000000',
             '1920-06-15T00:00:00.000000000', '1921-06-15T00:00:00.000000000',
             '1922-06-15T00:00:00.000000000', '1923-06-15T00:00:00.000000000',
             '1924-06-15T00:00:00.000000000', '1925-06-15T00:00:00.000000000',
             '1926-06-15T00:00:00.000000000', '1927-06-15T00:00:00.000000000',
             '1928-06-15T00:00:00.000000000', '1929-06-15T00:00:00.000000000',
             '1930-06-15T00:00:00.000000000', '1931-06-15T00:00:00.000000000',
             '1932-06-15T00:00:00.000000000', '1933-06-15T00:00:00.000000000',
             '1934-06-15T00:00:00.000000000', '1935-06-15T00:00:00.000000000',
             '1936-06-15T00:00:00.000000000', '1937-06-15T00:00:00.000000000',
             '1938-06-15T00:00:00.000000000', '1939-06-15T00:00:00.000000000',
             '1940-06-15T00:00:00.000000000', '1941-06-15T00:00:00.000000000',
             '1942-06-15T00:00:00.000000000', '1943-06-15T00:00:00.000000000',
             '1944-06-15T00:00:00.000000000', '1945-06-15T00:00:00.000000000',
             '1946-06-15T00:00:00.000000000', '1947-06-15T00:00:00.000000000',
             '1948-06-15T00:00:00.000000000', '1949-06-15T00:00:00.000000000',
             '1950-06-15T00:00:00.000000000', '1951-06-15T00:00:00.000000000',
             '1952-06-15T00:00:00.000000000', '1953-06-15T00:00:00.000000000',
             '1954-06-15T00:00:00.000000000', '1955-06-15T00:00:00.000000000',
             '1956-06-15T00:00:00.000000000', '1957-06-15T00:00:00.000000000',
             '1958-06-15T00:00:00.000000000', '1959-06-15T00:00:00.000000000',
             '1960-06-15T00:00:00.000000000', '1961-06-15T00:00:00.000000000',
             '1962-06-15T00:00:00.000000000', '1963-06-15T00:00:00.000000000',
             '1964-06-15T00:00:00.000000000', '1965-06-15T00:00:00.000000000',
             '1966-06-15T00:00:00.000000000', '1967-06-15T00:00:00.000000000',
             '1968-06-15T00:00:00.000000000', '1969-06-15T00:00:00.000000000',
             '1970-06-15T00:00:00.000000000', '1971-06-15T00:00:00.000000000',
             '1972-06-15T00:00:00.000000000', '1973-06-15T00:00:00.000000000',
             '1974-06-15T00:00:00.000000000', '1975-06-15T00:00:00.000000000',
             '1976-06-15T00:00:00.000000000', '1977-06-15T00:00:00.000000000',
             '1978-06-15T00:00:00.000000000', '1979-06-15T00:00:00.000000000',
             '1980-06-15T00:00:00.000000000', '1981-06-15T00:00:00.000000000',
             '1982-06-15T00:00:00.000000000', '1983-06-15T00:00:00.000000000',
             '1984-06-15T00:00:00.000000000', '1985-06-15T00:00:00.000000000',
             '1986-06-15T00:00:00.000000000', '1987-06-15T00:00:00.000000000',
             '1988-06-15T00:00:00.000000000', '1989-06-15T00:00:00.000000000',
             '1990-06-15T00:00:00.000000000', '1991-06-15T00:00:00.000000000',
             '1992-06-15T00:00:00.000000000', '1993-06-15T00:00:00.000000000',
             '1994-06-15T00:00:00.000000000', '1995-06-15T00:00:00.000000000',
             '1996-06-15T00:00:00.000000000', '1997-06-15T00:00:00.000000000',
             '1998-06-15T00:00:00.000000000', '1999-06-15T00:00:00.000000000',
             '2000-06-15T00:00:00.000000000', '2001-06-15T00:00:00.000000000',
             '2002-06-15T00:00:00.000000000', '2003-06-15T00:00:00.000000000',
             '2004-06-15T00:00:00.000000000', '2005-06-15T00:00:00.000000000',
             '2006-06-15T00:00:00.000000000', '2007-06-15T00:00:00.000000000',
             '2008-06-15T00:00:00.000000000', '2009-06-15T00:00:00.000000000',
             '2010-06-15T00:00:00.000000000', '2011-06-15T00:00:00.000000000',
             '2012-06-15T00:00:00.000000000', '2013-06-15T00:00:00.000000000',
             '2014-06-15T00:00:00.000000000', '2015-06-15T00:00:00.000000000',
             '2016-06-15T00:00:00.000000000', '2017-06-15T00:00:00.000000000',
             '2018-06-15T00:00:00.000000000'], dtype='datetime64[ns]')
    • global_average_sea_level_change
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Observed global-average sea level (mean value)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline
      standard_name :
      global_average_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([-173.2614  , -168.8017  , -180.39    , -170.2678  , -168.7201  ,
             -160.9814  , -175.6053  , -169.2692  , -184.1125  , -178.726   ,
             -177.1215  , -161.7186  , -154.0655  , -146.4479  , -144.4569  ,
             -140.9473  , -167.2579  , -157.3991  , -153.3645  , -146.9235  ,
             -138.2963  , -138.6246  , -140.1698  , -154.9731  , -149.7155  ,
             -154.3652  , -155.0322  , -148.16    , -150.6375  , -151.3294  ,
             -146.431   , -146.1101  , -131.793   , -137.9301  , -151.1301  ,
             -138.7756  , -144.5951  , -135.3655  , -125.8681  , -121.6888  ,
             -132.3584  , -117.0145  , -116.8616  , -110.3382  , -118.8721  ,
             -119.172   , -104.4705  , -112.5419  , -104.6075  ,  -92.32075 ,
              -96.18673 ,  -85.61614 ,  -85.57809 ,  -79.77115 ,  -89.93809 ,
              -86.62637 , -100.0402  ,  -83.94308 ,  -85.72778 ,  -82.73127 ,
              -76.86832 ,  -77.21474 ,  -79.11188 ,  -78.69135 ,  -82.75202 ,
              -76.65543 ,  -82.74987 ,  -82.96695 ,  -84.99568 ,  -84.67997 ,
              -84.90437 ,  -72.7614  ,  -78.48801 ,  -83.24537 ,  -76.77891 ,
              -68.12081 ,  -78.09583 ,  -73.46108 ,  -78.13711 ,  -68.2542  ,
              -70.5558  ,  -53.37497 ,  -61.62583 ,  -58.23164 ,  -58.55206 ,
              -64.17741 ,  -56.87627 ,  -59.44401 ,  -62.0668  ,  -54.93922 ,
              -51.67675 ,  -59.24024 ,  -59.88175 ,  -58.91027 ,  -56.07227 ,
              -45.17002 ,  -49.75505 ,  -36.20533 ,  -35.75893 ,  -32.66101 ,
              -30.49195 ,  -28.5067  ,  -18.6965  ,  -14.9081  ,  -29.08901 ,
              -22.8293  ,  -11.06644 ,  -16.89563 ,   -9.371227,   -7.32473 ,
               -2.866128,   -7.194661,   12.19746 ,    6.370174,   11.86894 ,
               17.86952 ,   23.94186 ,   32.35805 ,   35.63572 ], dtype=float32)
    • global_average_sea_level_change_upper
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Observed global-average sea level (upper bound)
      standard_name :
      global_average_sea_level_change
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline
      coverage_content_type :
      physicalMeasurement
      array([-1.410028e+02, -1.358976e+02, -1.482138e+02, -1.389305e+02,
             -1.374501e+02, -1.303515e+02, -1.444894e+02, -1.399613e+02,
             -1.525979e+02, -1.464989e+02, -1.455295e+02, -1.313730e+02,
             -1.240754e+02, -1.170183e+02, -1.153749e+02, -1.113261e+02,
             -1.382314e+02, -1.281911e+02, -1.251536e+02, -1.190321e+02,
             -1.104519e+02, -1.119796e+02, -1.126681e+02, -1.262868e+02,
             -1.235410e+02, -1.277419e+02, -1.295459e+02, -1.235259e+02,
             -1.252716e+02, -1.276338e+02, -1.221276e+02, -1.216057e+02,
             -1.078001e+02, -1.138931e+02, -1.273955e+02, -1.162141e+02,
             -1.221016e+02, -1.135316e+02, -1.036666e+02, -9.995376e+01,
             -1.115368e+02, -9.612569e+01, -9.627788e+01, -9.035658e+01,
             -9.957440e+01, -9.930499e+01, -8.485604e+01, -9.408807e+01,
             -8.592069e+01, -7.411494e+01, -7.817360e+01, -6.654138e+01,
             -6.732684e+01, -6.166613e+01, -7.300113e+01, -6.971235e+01,
             -8.382143e+01, -6.684290e+01, -7.164177e+01, -6.863579e+01,
             -6.322494e+01, -6.367130e+01, -6.630450e+01, -6.539838e+01,
             -6.926268e+01, -6.367536e+01, -6.990913e+01, -7.034164e+01,
             -7.275970e+01, -7.235756e+01, -7.234432e+01, -6.005935e+01,
             -6.581922e+01, -7.075460e+01, -6.423583e+01, -5.615923e+01,
             -6.669364e+01, -6.182401e+01, -6.672702e+01, -5.695935e+01,
             -5.900002e+01, -4.218877e+01, -5.067751e+01, -4.713789e+01,
             -4.789229e+01, -5.386267e+01, -4.692920e+01, -4.921629e+01,
             -5.168835e+01, -4.554904e+01, -4.122210e+01, -4.519120e+01,
             -4.907295e+01, -4.872273e+01, -4.254105e+01, -2.978386e+01,
             -4.084937e+01, -2.525401e+01, -2.590376e+01, -1.751744e+01,
             -2.205799e+01, -1.914060e+01, -1.085651e+01, -7.555435e+00,
             -2.127952e+01, -1.519645e+01, -3.251769e+00, -9.362613e+00,
             -2.224959e+00, -1.388925e-01,  5.728721e+00,  1.375723e-01,
              2.013864e+01,  1.494265e+01,  2.025806e+01,  2.659175e+01,
              3.267299e+01,  4.267341e+01,  4.621376e+01], dtype=float32)
    • global_average_sea_level_change_lower
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Observed global-mean sea level (lower bound)
      standard_name :
      global_average_sea_level_change
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline
      coverage_content_type :
      physicalMeasurement
      array([-203.5573  , -201.0185  , -212.0741  , -202.6976  , -200.167   ,
             -192.1313  , -205.9265  , -200.8361  , -214.9371  , -208.9869  ,
             -207.3851  , -191.8108  , -182.9198  , -176.3063  , -173.511   ,
             -169.159   , -195.312   , -185.0264  , -180.9585  , -175.2848  ,
             -164.7739  , -165.4743  , -167.3019  , -182.6383  , -174.977   ,
             -180.609   , -179.1875  , -172.1679  , -175.2894  , -175.7121  ,
             -170.006   , -170.2372  , -155.3927  , -162.1465  , -173.8665  ,
             -162.8529  , -167.8972  , -158.2683  , -147.7587  , -142.7823  ,
             -153.9127  , -138.0898  , -136.6612  , -130.7931  , -138.6863  ,
             -138.5608  , -123.3204  , -131.3099  , -123.5531  , -110.6541  ,
             -114.8069  , -103.994   , -103.7242  ,  -97.88902 , -107.0384  ,
             -104.5989  , -116.3831  , -101.2467  , -100.4948  ,  -97.0033  ,
              -90.80142 ,  -90.28999 ,  -91.6541  ,  -91.87236 ,  -95.92844 ,
              -89.74098 ,  -95.52306 ,  -95.26913 ,  -97.08644 ,  -96.82774 ,
              -97.03365 ,  -84.74745 ,  -90.35551 ,  -96.02547 ,  -89.27707 ,
              -79.81735 ,  -89.15256 ,  -84.83942 ,  -88.8153  ,  -79.92072 ,
              -81.5142  ,  -64.29264 ,  -72.42105 ,  -69.0472  ,  -69.40581 ,
              -74.0112  ,  -66.79086 ,  -69.60036 ,  -72.69957 ,  -64.4972  ,
              -61.66598 ,  -72.96253 ,  -70.50755 ,  -68.81976 ,  -68.88728 ,
              -60.33863 ,  -58.47327 ,  -47.3814  ,  -45.74109 ,  -48.29504 ,
              -39.16234 ,  -38.03562 ,  -26.06236 ,  -22.65467 ,  -36.81041 ,
              -30.62476 ,  -18.8485  ,  -23.90482 ,  -17.19599 ,  -14.81402 ,
              -11.33283 ,  -14.19403 ,    4.005728,   -2.195722,    3.502924,
                9.216259,   15.51055 ,   22.31229 ,   24.99356 ], dtype=float32)
    • glac_mean
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Glacier contribution (mean value)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline. The glacier term does not include peripheral glaciers of both ice sheets
      standard_name :
      global_average_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([-79.5537  , -78.70381 , -77.84364 , -77.27209 , -76.43074 , -75.4351  ,
             -74.63531 , -73.98326 , -73.19345 , -72.44661 , -71.75109 , -70.86197 ,
             -70.11145 , -69.4271  , -68.29491 , -66.74526 , -65.74427 , -64.55025 ,
             -63.50145 , -62.63396 , -62.11165 , -61.49796 , -60.7543  , -59.56335 ,
             -58.62262 , -57.689   , -56.62621 , -55.49389 , -54.47128 , -53.49628 ,
             -52.53492 , -51.21866 , -50.28735 , -49.37898 , -48.64113 , -47.76177 ,
             -46.69285 , -45.7528  , -44.77358 , -43.99298 , -43.04232 , -42.00475 ,
             -41.06314 , -39.97578 , -38.81485 , -37.81468 , -36.88127 , -35.84194 ,
             -34.92814 , -34.30862 , -33.19721 , -32.41928 , -31.49255 , -30.49181 ,
             -29.6755  , -29.21055 , -28.30467 , -27.31993 , -26.576   , -26.02886 ,
             -25.28234 , -24.53464 , -23.70492 , -23.34496 , -23.34749 , -23.21984 ,
             -22.8589  , -22.52689 , -22.31527 , -21.84372 , -21.5511  , -21.08332 ,
             -21.04181 , -20.76787 , -20.35972 , -20.04416 , -19.91758 , -19.35838 ,
             -18.75264 , -18.12921 , -17.68751 , -17.23549 , -16.85747 , -16.6097  ,
             -16.01708 , -15.47767 , -15.12901 , -14.80937 , -14.34585 , -13.81624 ,
             -12.95128 , -12.28005 , -12.10895 , -11.36047 , -10.6643  ,  -9.838601,
              -9.57886 ,  -8.885141,  -7.964991,  -7.3676  ,  -6.868742,  -6.276946,
              -5.655815,  -4.752999,  -3.978419,  -3.452075,  -2.64425 ,  -1.977132,
              -1.448654,  -0.809522,   0.104115,   0.734044,   1.000621,   1.867449,
               2.607803,   3.392661,   4.098025,   4.985921,   5.272038],
            dtype=float32)
    • glac_upper
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Glacier contribution (upper bound)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline. The glacier term does not include peripheral glaciers of both ice sheets
      standard_name :
      global_average_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([-62.5 , -61.8 , -61.2 , -60.55, -59.8 , -58.85, -58.05, -57.65, -57.05,
             -56.4 , -55.8 , -55.05, -54.4 , -53.75, -52.85, -51.65, -50.6 , -49.5 ,
             -48.7 , -47.95, -47.45, -47.05, -46.35, -45.35, -44.55, -43.7 , -42.8 ,
             -41.75, -40.8 , -39.8 , -38.95, -37.75, -37.15, -36.35, -35.75, -34.9 ,
             -33.9 , -32.95, -32.1 , -31.4 , -30.5 , -29.55, -28.55, -27.5 , -26.45,
             -25.7 , -24.75, -23.8 , -22.95, -22.35, -21.35, -20.55, -19.45, -18.55,
             -17.75, -17.5 , -16.45, -15.85, -15.4 , -15.2 , -14.65, -14.25, -13.45,
             -13.55, -14.15, -14.25, -14.1 , -14.1 , -13.8 , -13.45, -13.4 , -13.05,
             -13.2 , -13.2 , -13.05, -13.  , -13.  , -12.55, -12.2 , -11.5 , -11.35,
             -11.15, -10.85, -10.9 , -10.6 , -10.05,  -9.75,  -9.7 ,  -9.5 ,  -9.15,
              -8.75,  -8.4 ,  -8.2 ,  -7.45,  -6.95,  -6.5 ,  -6.35,  -5.8 ,  -5.25,
              -4.95,  -4.85,  -4.55,  -4.5 ,  -4.4 ,  -3.7 ,  -3.2 ,  -2.45,  -1.8 ,
              -1.3 ,  -0.65,   0.25,   0.85,   1.15,   2.05,   2.8 ,   3.65,   4.35,
               5.35,   5.75], dtype=float32)
    • glac_lower
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Glacier contribution (lower bound)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline. The glacier term does not include peripheral glaciers of both ice sheets
      standard_name :
      global_average_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([-95.5 , -94.6 , -93.5 , -92.85, -91.8 , -90.7 , -89.7 , -88.9 , -87.95,
             -86.95, -86.25, -85.15, -84.25, -83.4 , -82.1 , -80.45, -79.15, -77.65,
             -76.2 , -75.2 , -74.55, -73.95, -73.15, -71.8 , -70.7 , -69.55, -68.25,
             -66.9 , -65.55, -64.25, -63.15, -61.65, -60.5 , -59.45, -58.55, -57.55,
             -56.25, -55.1 , -54.05, -53.2 , -52.1 , -50.9 , -49.75, -48.5 , -47.1 ,
             -45.95, -44.85, -43.7 , -42.7 , -41.85, -40.75, -39.95, -38.9 , -37.7 ,
             -36.85, -36.35, -35.35, -34.15, -33.15, -32.5 , -31.7 , -30.85, -29.95,
             -29.45, -29.65, -29.6 , -29.  , -28.75, -28.45, -27.85, -27.4 , -26.85,
             -26.45, -26.2 , -25.75, -25.35, -25.15, -24.45, -23.7 , -22.7 , -22.3 ,
             -22.  , -21.5 , -21.3 , -20.55, -19.9 , -19.5 , -19.05, -18.55, -17.9 ,
             -16.85, -16.1 , -15.7 , -14.85, -14.  , -12.9 , -12.35, -11.2 , -10.2 ,
              -9.3 ,  -8.65,  -7.7 ,  -6.75,  -5.1 ,  -4.3 ,  -3.75,  -2.9 ,  -2.2 ,
              -1.6 ,  -0.95,   0.  ,   0.6 ,   0.85,   1.7 ,   2.45,   3.2 ,   3.85,
               4.65,   4.85], dtype=float32)
    • GrIS_mean
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Greenland Ice Sheet contribution (mean value)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline. This term includes glaciers in the Greenland periphery
      standard_name :
      global_average_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([-48.06443 , -48.17939 , -47.8617  , -47.45355 , -46.62656 , -46.41721 ,
             -45.95629 , -45.59074 , -44.88063 , -44.30749 , -43.8577  , -43.78566 ,
             -43.26035 , -42.92117 , -42.76309 , -42.44059 , -42.26547 , -41.57772 ,
             -41.46857 , -41.30271 , -41.1232  , -40.96415 , -41.1604  , -40.83682 ,
             -40.24991 , -40.05807 , -39.03788 , -38.28416 , -37.16051 , -36.13228 ,
             -35.51887 , -33.67486 , -32.69801 , -31.60116 , -30.64511 , -29.52956 ,
             -28.27722 , -27.62118 , -27.21039 , -26.73358 , -26.3139  , -25.69234 ,
             -25.21231 , -24.5137  , -24.01293 , -23.97104 , -23.77624 , -23.25448 ,
             -22.29762 , -21.18231 , -20.36542 , -19.67419 , -19.20826 , -18.74824 ,
             -18.4568  , -18.22774 , -17.84984 , -17.12708 , -16.44646 , -16.25915 ,
             -15.57327 , -14.89032 , -14.02888 , -13.78883 , -13.75572 , -13.32122 ,
             -12.59099 , -12.2229  , -11.6633  , -11.25493 , -11.10174 , -10.61606 ,
             -10.91836 , -10.96731 , -10.72626 , -10.67009 , -10.84678 , -10.84261 ,
             -10.76609 , -10.65714 , -10.36815 ,  -9.840933,  -9.453761,  -9.68695 ,
              -9.822171,  -9.610285,  -9.435392,  -9.436426,  -9.164365,  -8.801208,
              -8.592012,  -8.406363,  -8.648116,  -8.557271,  -8.316084,  -7.781679,
              -8.155566,  -8.129179,  -7.757576,  -7.479927,  -7.19333 ,  -6.905331,
              -6.262058,  -5.565808,  -4.885715,  -4.255964,  -3.492525,  -2.684134,
              -1.895747,  -1.214831,  -0.100957,   1.214175,   2.404488,   3.443771,
               3.849548,   4.429987,   5.181757,   5.83257 ,   5.969421],
            dtype=float32)
    • GrIS_upper
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Greenland Ice Sheet contribution (upper bound)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline. This term includes glaciers in the Greenland periphery
      standard_name :
      global_average_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([-37.4 , -37.6 , -37.45, -36.95, -37.4 , -37.95, -37.5 , -37.25, -36.55,
             -37.15, -38.3 , -38.3 , -37.75, -37.4 , -37.45, -37.25, -37.1 , -36.45,
             -36.45, -36.35, -36.25, -36.05, -36.3 , -36.05, -35.55, -35.35, -34.4 ,
             -33.65, -32.65, -31.75, -31.15, -29.35, -28.4 , -27.35, -26.45, -25.3 ,
             -24.  , -23.5 , -23.15, -22.75, -22.35, -21.8 , -21.45, -20.8 , -20.35,
             -20.35, -20.15, -19.65, -18.8 , -17.75, -16.9 , -16.35, -15.9 , -15.5 ,
             -15.2 , -15.05, -14.75, -14.1 , -13.4 , -13.3 , -12.65, -12.1 , -11.25,
             -11.05, -11.05, -10.65,  -9.95,  -9.6 ,  -9.1 ,  -8.7 ,  -8.65,  -8.25,
              -8.55,  -8.7 ,  -8.45,  -8.45,  -8.65,  -8.8 ,  -8.7 ,  -8.65,  -8.4 ,
              -7.9 ,  -7.5 ,  -7.75,  -8.  ,  -7.8 ,  -7.7 ,  -7.7 ,  -7.5 ,  -7.15,
              -7.05,  -6.9 ,  -7.35,  -7.3 ,  -7.1 ,  -6.65,  -7.1 ,  -7.1 ,  -6.85,
              -6.65,  -6.4 ,  -6.2 ,  -5.65,  -5.2 ,  -4.6 ,  -4.  ,  -3.3 ,  -2.5 ,
              -1.8 ,  -1.15,  -0.05,   1.25,   2.5 ,   3.6 ,   4.05,   4.7 ,   5.5 ,
               6.2 ,   6.4 ], dtype=float32)
    • GrIS_lower
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Greenland Ice Sheet contribution (lower bound)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline. This term includes glaciers in the Greenland periphery
      standard_name :
      global_average_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([-58.8 , -58.95, -58.65, -58.2 , -56.2 , -55.1 , -54.45, -54.2 , -53.45,
             -51.7 , -49.45, -49.3 , -48.75, -48.3 , -48.1 , -47.7 , -47.55, -46.75,
             -46.6 , -46.35, -46.15, -46.  , -46.05, -45.75, -45.  , -44.75, -43.65,
             -42.9 , -41.7 , -40.55, -39.95, -38.05, -37.05, -35.85, -34.85, -33.7 ,
             -32.4 , -31.6 , -31.25, -30.75, -30.35, -29.65, -29.15, -28.4 , -27.8 ,
             -27.75, -27.45, -27.  , -25.9 , -24.75, -23.9 , -23.15, -22.6 , -22.15,
             -21.75, -21.45, -21.05, -20.25, -19.6 , -19.3 , -18.6 , -17.85, -17.  ,
             -16.6 , -16.55, -16.1 , -15.45, -15.05, -14.4 , -14.  , -13.8 , -13.25,
             -13.55, -13.4 , -13.05, -13.05, -13.2 , -13.1 , -12.95, -12.75, -12.4 ,
             -11.85, -11.4 , -11.7 , -11.75, -11.4 , -11.15, -11.1 , -10.8 , -10.4 ,
             -10.2 ,  -9.95, -10.05,  -9.85,  -9.55,  -9.  ,  -9.35,  -9.25,  -8.7 ,
              -8.35,  -8.  ,  -7.6 ,  -6.85,  -6.  ,  -5.25,  -4.6 ,  -3.75,  -2.9 ,
              -2.05,  -1.3 ,  -0.15,   1.2 ,   2.35,   3.35,   3.7 ,   4.2 ,   4.95,
               5.5 ,   5.6 ], dtype=float32)
    • AIS_mean
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Antarctic Ice Sheet contribution (mean value)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline.
      standard_name :
      global_average_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([-9.494853, -9.440325, -9.385606, -9.33183 , -9.277636, -9.223116,
             -9.168591, -9.114279, -9.060195, -9.005735, -8.951541, -8.897089,
             -8.842772, -8.788795, -8.734428, -8.680114, -8.625927, -8.572177,
             -8.517279, -8.462777, -8.40924 , -8.354959, -8.300263, -8.246496,
             -8.191628, -8.137795, -8.082689, -8.029065, -7.975211, -7.921008,
             -7.866346, -7.812623, -7.757341, -7.703496, -7.648875, -7.594863,
             -7.540828, -7.486982, -7.431714, -7.37794 , -7.323641, -7.269779,
             -7.215502, -7.160399, -7.106715, -7.052174, -6.997552, -6.943965,
             -6.889262, -6.835301, -6.780492, -6.726675, -6.672178, -6.617932,
             -6.563951, -6.509375, -6.455706, -6.401492, -6.346915, -6.293032,
             -6.238167, -6.18503 , -6.12951 , -6.075918, -6.021938, -5.967153,
             -5.91324 , -5.859026, -5.803863, -5.750378, -5.696604, -5.641496,
             -5.586889, -5.533119, -5.478683, -5.424946, -5.369976, -5.316533,
             -5.262051, -5.207699, -5.153387, -5.099274, -5.044568, -4.991152,
             -4.936046, -4.88267 , -4.827497, -4.77335 , -4.718897, -4.66562 ,
             -4.610252, -4.556954, -4.71453 , -4.683066, -4.34572 , -4.100896,
             -3.977624, -3.823491, -3.650321, -3.360491, -3.136071, -2.979572,
             -2.871569, -2.560501, -2.080149, -2.154084, -2.414372, -1.846381,
             -1.033903, -1.078408, -0.23572 ,  0.087107,  0.382881,  1.079971,
              1.770051,  2.701558,  2.511931,  2.652418,  3.810021], dtype=float32)
    • AIS_upper
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Antarctic Ice Sheet contribution (upper bound)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline.
      standard_name :
      global_average_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([-3.3 , -3.3 , -3.3 , -3.3 , -3.3 , -3.3 , -3.35, -3.35, -3.35, -3.4 ,
             -3.4 , -3.4 , -3.45, -3.45, -3.45, -3.45, -3.45, -3.45, -3.5 , -3.5 ,
             -3.5 , -3.5 , -3.5 , -3.45, -3.45, -3.45, -3.45, -3.5 , -3.5 , -3.5 ,
             -3.5 , -3.5 , -3.5 , -3.5 , -3.55, -3.55, -3.55, -3.5 , -3.5 , -3.5 ,
             -3.5 , -3.55, -3.55, -3.5 , -3.5 , -3.5 , -3.5 , -3.5 , -3.5 , -3.5 ,
             -3.5 , -3.5 , -3.5 , -3.5 , -3.5 , -3.5 , -3.45, -3.5 , -3.45, -3.45,
             -3.45, -3.45, -3.45, -3.45, -3.45, -3.4 , -3.4 , -3.4 , -3.35, -3.35,
             -3.35, -3.35, -3.3 , -3.3 , -3.25, -3.25, -3.25, -3.25, -3.2 , -3.2 ,
             -3.15, -3.15, -3.1 , -3.1 , -3.05, -3.05, -3.  , -2.95, -2.9 , -2.85,
             -2.8 , -2.75, -2.85, -2.6 , -2.4 , -2.3 , -2.3 , -2.25, -2.1 , -2.  ,
             -1.95, -1.9 , -1.95, -1.7 , -1.35, -1.55, -1.9 , -1.45, -0.75, -0.9 ,
             -0.15,  0.15,  0.55,  1.3 ,  2.1 ,  3.15,  3.05,  3.3 ,  4.55],
            dtype=float32)
    • AIS_lower
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Antarctic Ice Sheet contribution (lower bound)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline.
      standard_name :
      global_average_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([-16.15, -16.  , -15.9 , -15.8 , -15.65, -15.55, -15.4 , -15.3 , -15.15,
             -15.05, -14.95, -14.85, -14.75, -14.6 , -14.45, -14.35, -14.2 , -14.1 ,
             -14.  , -13.9 , -13.75, -13.65, -13.55, -13.4 , -13.25, -13.15, -13.05,
             -12.9 , -12.8 , -12.7 , -12.55, -12.45, -12.3 , -12.2 , -12.1 , -11.95,
             -11.85, -11.7 , -11.6 , -11.45, -11.35, -11.2 , -11.1 , -11.  , -10.85,
             -10.75, -10.65, -10.55, -10.4 , -10.3 , -10.2 , -10.05,  -9.95,  -9.85,
              -9.7 ,  -9.6 ,  -9.5 ,  -9.4 ,  -9.3 ,  -9.2 ,  -9.05,  -8.95,  -8.8 ,
              -8.7 ,  -8.6 ,  -8.5 ,  -8.35,  -8.25,  -8.15,  -8.05,  -7.95,  -7.8 ,
              -7.75,  -7.65,  -7.55,  -7.4 ,  -7.35,  -7.25,  -7.15,  -7.05,  -7.  ,
              -6.95,  -6.85,  -6.75,  -6.7 ,  -6.65,  -6.6 ,  -6.55,  -6.45,  -6.35,
              -6.3 ,  -6.25,  -6.45,  -6.5 ,  -6.  ,  -5.7 ,  -5.5 ,  -5.2 ,  -5.  ,
              -4.55,  -4.2 ,  -4.05,  -3.75,  -3.3 ,  -2.7 ,  -2.7 ,  -2.85,  -2.2 ,
              -1.3 ,  -1.25,  -0.3 ,   0.  ,   0.2 ,   0.8 ,   1.4 ,   2.2 ,   1.9 ,
               1.9 ,   2.95], dtype=float32)
    • tws_mean
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Terrestrial water storage contribution (mean value)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline. This term includes the effects for groundwater depletion, reservoir impoundment and non-anthropogenic tws changes
      standard_name :
      global_average_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([12.32683 , 15.2467  , 16.57081 , 16.62429 , 16.22705 , 16.79946 ,
             14.79107 , 14.42116 , 15.12819 , 15.98364 , 16.35336 , 16.71663 ,
             16.5323  , 15.47516 , 16.90459 , 17.79461 , 15.47155 , 12.6588  ,
             14.92122 , 16.71301 , 16.14232 , 15.7267  , 15.32865 , 13.3177  ,
             14.32193 , 14.41571 , 13.62185 , 12.62899 , 14.25476 , 15.04135 ,
             16.19835 , 16.17618 , 16.01999 , 15.98758 , 15.31676 , 14.35338 ,
             16.23235 , 16.30111 , 15.64495 , 15.36817 , 15.90256 , 15.89298 ,
             14.8864  , 14.11513 , 15.49833 , 14.27181 , 14.42497 , 13.70423 ,
             13.41253 , 13.62537 , 12.31011 , 14.42373 , 14.6821  , 13.68275 ,
             13.80435 , 11.774   ,  9.127699,  9.383834, 11.14425 , 10.54249 ,
              9.923853,  9.572472,  8.805349,  8.808065,  8.601792,  7.528022,
              6.758744,  5.798219,  3.998297,  4.584832,  3.463519,  2.057811,
              2.214306,  0.658905, -4.624437, -2.607902, -2.196488, -1.326669,
             -4.348937, -4.915074, -2.910202, -3.764995, -4.139982, -3.270229,
             -4.243092, -5.043009, -5.348708, -2.395387, -2.955027, -4.923722,
             -4.803403, -4.102181, -2.382769, -4.960765, -5.061406, -3.818505,
             -3.931961, -4.718496, -3.658077, -4.432979, -5.59041 , -3.270434,
             -1.413325, -0.617243, -3.308559, -1.751292, -1.530058, -2.290474,
             -2.057154, -1.032457, -0.527471, -3.327292,  0.736777,  0.398772,
             -0.759097,  3.344095,  4.953524,  2.75522 ,  2.005245], dtype=float32)
    • tws_upper
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Terrestrial water storage contribution (upper bound)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline. This term includes the effects for groundwater depletion, reservoir impoundment and non-anthropogenic tws changes
      standard_name :
      global_average_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([21.8 , 24.7 , 26.1 , 26.1 , 25.7 , 26.4 , 24.35, 23.85, 24.65, 25.5 ,
             26.05, 26.25, 25.85, 24.75, 26.45, 27.2 , 24.8 , 22.1 , 24.35, 26.1 ,
             25.4 , 25.15, 24.8 , 22.55, 23.6 , 23.6 , 22.85, 21.75, 23.5 , 24.1 ,
             25.3 , 25.45, 25.35, 25.1 , 24.45, 23.4 , 25.35, 25.2 , 24.45, 24.25,
             25.  , 24.8 , 23.8 , 23.05, 24.5 , 23.1 , 23.1 , 22.55, 21.95, 22.15,
             20.75, 22.9 , 23.15, 22.15, 22.25, 19.9 , 17.1 , 17.4 , 19.15, 18.3 ,
             17.55, 17.05, 16.2 , 16.2 , 15.75, 14.25, 13.3 , 12.1 , 10.15, 10.4 ,
              9.1 ,  7.45,  7.35,  5.65,  0.15,  2.05,  2.25,  3.1 , -0.15, -0.95,
              0.95, -0.1 , -0.55,  0.25, -0.85, -1.85, -2.25,  0.6 ,  0.  , -2.05,
             -2.1 , -1.45,  0.1 , -2.3 , -2.6 , -1.35, -1.45, -2.2 , -1.25, -2.1 ,
             -3.3 , -0.9 ,  0.85,  1.1 , -1.8 , -0.45, -0.5 , -1.45, -1.45, -0.65,
             -0.3 , -3.1 ,  1.1 ,  0.9 , -0.05,  4.25,  6.  ,  4.05,  3.45],
            dtype=float32)
    • tws_lower
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Terrestrial water storage contribution (lower bound)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline. This term includes the effects for groundwater depletion, reservoir impoundment and non-anthropogenic tws changes
      standard_name :
      global_average_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([ 2.8 ,  5.75,  7.15,  7.15,  6.7 ,  7.3 ,  5.3 ,  4.95,  5.7 ,  6.55,
              6.85,  7.25,  7.15,  6.  ,  7.35,  8.35,  5.9 ,  3.25,  5.45,  7.25,
              6.8 ,  6.2 ,  6.  ,  3.9 ,  5.1 ,  4.95,  4.2 ,  3.35,  5.  ,  5.85,
              7.15,  7.05,  6.9 ,  6.9 ,  6.25,  5.1 ,  7.15,  7.4 ,  6.65,  6.4 ,
              6.95,  7.05,  5.95,  5.2 ,  6.65,  5.4 ,  5.6 ,  4.9 ,  4.7 ,  4.95,
              3.6 ,  5.75,  6.35,  5.45,  5.3 ,  3.5 ,  0.9 ,  1.25,  3.2 ,  2.75,
              2.35,  2.1 ,  1.5 ,  1.4 ,  1.55,  0.95,  0.3 , -0.55, -2.  , -1.15,
             -2.05, -3.45, -3.  , -4.4 , -9.4 , -7.45, -6.85, -5.75, -8.6 , -9.1 ,
             -6.95, -7.6 , -7.9 , -6.9 , -7.8 , -8.35, -8.45, -5.4 , -6.05, -7.75,
             -7.6 , -6.85, -5.05, -7.6 , -7.55, -6.2 , -6.35, -7.25, -5.95, -6.6 ,
             -7.7 , -5.4 , -3.45, -2.05, -4.6 , -2.8 , -2.4 , -2.95, -2.6 , -1.35,
             -0.75, -3.55,  0.35, -0.15, -1.6 ,  2.3 ,  3.65,  1.2 ,  0.2 ],
            dtype=float32)
    • global_average_thermosteric_sea_level_change
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Global thermosteric contribution (mean value)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline
      standard_name :
      global_average_thermosteric_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([-48.27935 , -49.1449  , -49.87756 , -51.10059 , -52.24018 , -53.02522 ,
             -54.00075 , -54.63808 , -55.22195 , -56.30412 , -57.15439 , -57.20584 ,
             -57.1498  , -56.56736 , -55.52489 , -55.26661 , -54.91271 , -54.69735 ,
             -54.723   , -54.93632 , -54.80711 , -55.03212 , -55.09238 , -55.52363 ,
             -55.45387 , -54.7929  , -53.94831 , -53.43022 , -52.71059 , -52.37742 ,
             -52.00357 , -51.67816 , -51.2972  , -50.85222 , -50.71305 , -50.05358 ,
             -49.01334 , -47.84866 , -46.62562 , -45.20037 , -43.8755  , -43.1103  ,
             -41.8538  , -40.20333 , -38.99926 , -38.89792 , -39.00972 , -39.52291 ,
             -40.56562 , -41.1619  , -40.33299 , -39.36175 , -38.56855 , -38.55814 ,
             -38.39777 , -38.42973 , -38.18145 , -37.66775 , -32.85158 , -34.88907 ,
             -32.15378 , -30.27759 , -28.98838 , -30.32302 , -32.66518 , -33.07999 ,
             -32.5255  , -33.74758 , -35.79723 , -35.12061 , -34.47978 , -32.36619 ,
             -31.22978 , -30.4711  , -29.49832 , -27.00934 , -27.39489 , -26.20742 ,
             -25.88254 , -26.23273 , -23.10203 , -23.47698 , -24.79599 , -26.22219 ,
             -25.93333 , -24.25556 , -22.57913 , -22.75148 , -21.70013 , -22.13612 ,
             -22.01452 , -19.32011 , -19.37729 , -19.75749 , -18.82006 , -19.78444 ,
             -16.73626 , -16.42434 , -16.19329 , -14.12327 , -14.55739 , -11.66312 ,
              -8.339601,  -5.616477,  -5.638072,  -4.908377,  -3.671441,  -4.624906,
              -2.783294,  -1.151002,  -1.598746,  -0.459241,   1.179538,   3.112605,
               4.670032,   6.744699,   6.472463,   8.048318,   8.563515],
            dtype=float32)
    • global_average_thermosteric_sea_level_change_upper
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Global thermosteric contribution (upper bound)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline
      standard_name :
      global_average_thermosteric_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([-3.755292e+01, -3.884960e+01, -3.988883e+01, -4.081586e+01,
             -4.137925e+01, -4.317715e+01, -4.322139e+01, -4.481405e+01,
             -4.446862e+01, -4.629888e+01, -4.693890e+01, -4.694190e+01,
             -4.699799e+01, -4.677302e+01, -4.492617e+01, -4.483843e+01,
             -4.482183e+01, -4.421012e+01, -4.436013e+01, -4.482677e+01,
             -4.514828e+01, -4.598584e+01, -4.644711e+01, -4.702437e+01,
             -4.616325e+01, -4.560277e+01, -4.500859e+01, -4.439879e+01,
             -4.384348e+01, -4.339024e+01, -4.309971e+01, -4.339293e+01,
             -4.269808e+01, -4.222107e+01, -4.117225e+01, -4.193172e+01,
             -4.011264e+01, -3.951003e+01, -3.765003e+01, -3.631175e+01,
             -3.530196e+01, -3.439969e+01, -3.308968e+01, -3.150355e+01,
             -3.051969e+01, -3.072696e+01, -3.024407e+01, -3.091557e+01,
             -3.186532e+01, -3.270880e+01, -3.174330e+01, -3.058271e+01,
             -3.003126e+01, -2.940073e+01, -2.971812e+01, -3.017969e+01,
             -2.964884e+01, -3.281664e+01, -3.054105e+01, -3.099778e+01,
             -2.901427e+01, -2.645434e+01, -2.591538e+01, -2.675690e+01,
             -2.858548e+01, -3.033202e+01, -3.137087e+01, -3.123989e+01,
             -3.425732e+01, -3.300057e+01, -3.149405e+01, -2.993246e+01,
             -2.852784e+01, -2.748119e+01, -2.615972e+01, -2.407697e+01,
             -2.238507e+01, -2.195104e+01, -2.082077e+01, -1.943857e+01,
             -1.977492e+01, -2.085185e+01, -2.100388e+01, -2.103319e+01,
             -2.098466e+01, -2.031391e+01, -1.958608e+01, -1.912669e+01,
             -1.871134e+01, -1.840796e+01, -1.835412e+01, -1.722550e+01,
             -1.552418e+01, -1.512383e+01, -1.582722e+01, -1.597253e+01,
             -1.493999e+01, -1.434837e+01, -1.348248e+01, -1.285780e+01,
             -1.192441e+01, -9.928843e+00, -7.354952e+00, -3.478755e+00,
             -4.991846e+00, -4.189908e+00, -2.415411e+00, -3.470755e+00,
             -2.081257e+00,  6.074552e-02, -1.137802e+00, -1.976276e-03,
              1.802459e+00,  3.669379e+00,  5.028707e+00,  7.239516e+00,
              7.420359e+00,  8.812847e+00,  9.560000e+00], dtype=float32)
    • global_average_thermosteric_sea_level_change_lower
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Global thermosteric contribution (lower bound)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline
      standard_name :
      global_average_thermosteric_sea_level_change
      coverage_content_type :
      physicalMeasurement
      array([-58.66631 , -58.75515 , -59.15502 , -60.98501 , -62.58571 , -62.01678 ,
             -64.65228 , -64.31616 , -65.63857 , -66.40546 , -66.61515 , -67.19209 ,
             -66.75679 , -65.86152 , -66.03175 , -65.15433 , -64.73333 , -64.62965 ,
             -64.74121 , -64.83634 , -64.59312 , -63.04762 , -63.42035 , -63.59563 ,
             -63.96157 , -63.41887 , -62.45147 , -61.84157 , -61.13857 , -60.30548 ,
             -59.93339 , -59.78192 , -59.36685 , -59.17365 , -59.41407 , -58.17271 ,
             -57.25801 , -55.66259 , -55.33403 , -53.69909 , -51.95582 , -51.47165 ,
             -49.90244 , -48.32549 , -46.88612 , -46.67402 , -47.43531 , -47.73483 ,
             -48.85261 , -48.88921 , -48.57523 , -47.57947 , -46.74437 , -46.92588 ,
             -46.83012 , -46.13955 , -46.0809  , -41.5479  , -36.07086 , -39.11736 ,
             -35.81501 , -33.8517  , -32.65176 , -34.26135 , -34.92962 , -34.86852 ,
             -33.47756 , -35.61958 , -38.71073 , -37.89655 , -37.08669 , -34.28116 ,
             -32.76495 , -33.06658 , -32.25731 , -28.70847 , -30.28824 , -29.13467 ,
             -30.53727 , -31.12568 , -25.61094 , -26.1012  , -27.61346 , -30.05125 ,
             -31.59076 , -28.26623 , -24.32987 , -25.04239 , -24.89919 , -25.83031 ,
             -26.08276 , -21.40783 , -22.73636 , -22.66715 , -20.69031 , -22.15413 ,
             -17.8914  , -18.73157 , -18.69731 , -15.70124 , -16.53659 , -13.48885 ,
              -9.539894,  -6.847701,  -6.501552,  -5.50026 ,  -4.638466,  -6.018044,
              -3.696332,  -1.842621,  -1.985486,  -0.843125,   0.553805,   2.740455,
               4.308544,   5.933526,   5.68614 ,   7.528717,   7.737213],
            dtype=float32)
    • sum_of_contrib_processes_mean
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Sum of contributing processes (mean value)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline
      coverage_content_type :
      physicalMeasurement
      array([-173.0908  , -170.2455  , -168.4218  , -168.5576  , -168.3724  ,
             -167.3254  , -168.996   , -168.9296  , -167.2526  , -166.1041  ,
             -165.3859  , -164.0583  , -162.8556  , -162.2538  , -158.4369  ,
             -155.3619  , -156.1022  , -156.7636  , -153.3141  , -150.6476  ,
             -150.3345  , -150.1465  , -150.0041  , -150.8781  , -148.2208  ,
             -146.2873  , -144.0978  , -142.6345  , -138.0876  , -134.9098  ,
             -131.7499  , -128.2318  , -126.0458  , -123.5734  , -122.3565  ,
             -120.6119  , -115.3171  , -112.4324  , -110.4212  , -107.9625  ,
             -104.6778  , -102.2089  , -100.4829  ,  -97.76259 ,  -93.46155 ,
              -93.49011 ,  -92.26482 ,  -91.88302 ,  -91.29312 ,  -89.8876  ,
              -88.39133 ,  -83.78445 ,  -81.28458 ,  -80.75824 ,  -79.31489 ,
              -80.62852 ,  -81.68963 ,  -79.15894 ,  -71.10312 ,  -72.95233 ,
              -69.34917 ,  -66.34019 ,  -64.07328 ,  -64.74999 ,  -67.21475 ,
              -68.08691 ,  -67.15629 ,  -68.58652 ,  -71.61411 ,  -69.41573 ,
              -69.39801 ,  -67.68875 ,  -66.60088 ,  -67.12786 ,  -70.76192 ,
              -65.82185 ,  -65.79039 ,  -63.1112  ,  -65.08457 ,  -65.21597 ,
              -59.29006 ,  -59.49049 ,  -60.36604 ,  -60.85049 ,  -61.02491 ,
              -59.3427  ,  -57.39531 ,  -54.23687 ,  -52.95834 ,  -54.41658 ,
              -53.04702 ,  -48.74046 ,  -47.30328 ,  -49.39422 ,  -47.28247 ,
              -45.39878 ,  -42.45514 ,  -42.05638 ,  -39.29918 ,  -36.83829 ,
              -37.42083 ,  -31.17114 ,  -24.61106 ,  -19.17525 ,  -19.96722 ,
              -16.59838 ,  -13.82782 ,  -13.49802 ,   -9.29408 ,   -5.360747,
               -2.386827,   -1.677288,    5.778527,    9.97247 ,   12.16477 ,
               20.68869 ,   23.29217 ,   24.349   ,   25.69289 ], dtype=float32)
    • sum_of_contrib_processes_upper
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Sum of contributing processes (upper bound)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline
      coverage_content_type :
      physicalMeasurement
      array([-146.7554  , -144.4624  , -142.7917  , -143.2258  , -142.7546  ,
             -142.6106  , -143.6178  , -144.4166  , -142.9986  , -142.3136  ,
             -142.6275  , -142.172   , -140.0537  , -139.8264  , -136.8249  ,
             -133.5388  , -133.9845  , -135.5226  , -131.5607  , -128.9024  ,
             -128.8621  , -129.398   , -129.7703  , -130.9279  , -128.1169  ,
             -126.1723  , -123.9696  , -122.8104  , -119.0313  , -116.049   ,
             -112.2763  , -109.0532  , -107.5212  , -104.8006  , -103.2331  ,
             -102.2022  ,  -96.47569 ,  -94.49187 ,  -91.69044 ,  -90.01851 ,
              -86.72672 ,  -84.09988 ,  -82.42024 ,  -79.65737 ,  -76.37685 ,
              -76.67559 ,  -74.60751 ,  -74.96027 ,  -74.2565  ,  -72.94527 ,
              -71.58691 ,  -66.50296 ,  -63.95107 ,  -64.09841 ,  -62.70353 ,
              -63.80777 ,  -64.98201 ,  -63.74578 ,  -56.87432 ,  -57.97203 ,
              -55.54325 ,  -52.31086 ,  -50.70527 ,  -51.59959 ,  -54.373   ,
              -56.05072 ,  -55.65946 ,  -57.01587 ,  -60.3909  ,  -58.6801  ,
              -58.54934 ,  -57.02615 ,  -56.32237 ,  -56.64848 ,  -60.58366 ,
              -56.16268 ,  -55.11836 ,  -53.20351 ,  -54.61036 ,  -53.67381 ,
              -50.46514 ,  -51.13157 ,  -51.69099 ,  -51.0666  ,  -51.37093 ,
              -50.65174 ,  -49.50291 ,  -46.223   ,  -45.4491  ,  -46.38181 ,
              -45.08736 ,  -42.11349 ,  -39.67417 ,  -41.17015 ,  -40.61808 ,
              -38.26372 ,  -37.09686 ,  -36.48188 ,  -33.82729 ,  -32.43985 ,
              -32.49448 ,  -27.03289 ,  -21.17146 ,  -15.57597 ,  -17.50895 ,
              -14.57951 ,  -11.70912 ,  -11.67529 ,   -8.072283,   -3.904315,
               -1.854432,   -1.145319,    6.611324,   10.93161 ,   13.24838 ,
               22.15863 ,   25.23776 ,   26.46899 ,   28.1528  ], dtype=float32)
    • sum_of_contrib_processes_lower
      (time)
      float32
      ...
      units :
      mm
      long_name :
      Sum of contributing processes (lower bound)
      valid_min :
      -1000000.0
      valid_max :
      1000000.0
      comment :
      Value is relative to 2002-2019 baseline
      coverage_content_type :
      physicalMeasurement
      array([-199.2279  , -195.4608  , -193.3698  , -193.1899  , -193.1122  ,
             -190.9092  , -193.7552  , -192.4955  , -191.0009  , -189.1483  ,
             -188.1824  , -186.8564  , -185.0629  , -184.6943  , -180.5469  ,
             -176.951   , -177.3026  , -178.3976  , -174.1986  , -171.293   ,
             -170.9093  , -169.6153  , -169.4658  , -170.5843  , -167.8015  ,
             -165.9058  , -163.5377  , -161.3009  , -156.8248  , -152.9051  ,
             -150.0791  , -146.3266  , -144.1976  , -141.6161  , -139.9311  ,
             -137.526   , -133.0068  , -129.4596  , -127.6632  , -125.5359  ,
             -121.7051  , -119.311   , -118.0327  , -114.6669  , -109.8173  ,
             -109.8156  , -108.9563  , -108.0885  , -107.5278  , -106.213   ,
             -104.468   ,  -99.68623 ,  -97.77548 ,  -96.68294 ,  -95.04986 ,
              -96.21081 ,  -97.48788 ,  -93.25143 ,  -84.02524 ,  -86.27145 ,
              -81.76678 ,  -78.91973 ,  -76.1308  ,  -77.09279 ,  -79.03656 ,
              -79.5088  ,  -77.77426 ,  -79.18987 ,  -82.29498 ,  -79.95874 ,
              -80.13211 ,  -77.83455 ,  -76.46307 ,  -76.82608 ,  -80.26009 ,
              -74.69262 ,  -75.56282 ,  -72.4054  ,  -75.11483 ,  -75.63506 ,
              -67.87987 ,  -67.69627 ,  -68.75343 ,  -70.00819 ,  -71.11594 ,
              -67.92054 ,  -64.787   ,  -61.86852 ,  -60.59767 ,  -62.13062 ,
              -60.85968 ,  -55.27069 ,  -54.45446 ,  -56.57859 ,  -53.42939 ,
              -51.62513 ,  -47.52125 ,  -47.46451 ,  -44.77463 ,  -41.17088 ,
              -42.09021 ,  -35.22521 ,  -27.77878 ,  -21.97751 ,  -22.08577 ,
              -18.32769 ,  -15.63631 ,  -15.51459 ,  -10.60268 ,   -6.317466,
               -2.846637,   -2.141298,    4.91853 ,    8.955513,   10.86838 ,
               18.9383  ,   21.12208 ,   21.96355 ,   22.94541 ], dtype=float32)
  • title :
    Global sea-level changes and contributing processes over 1900-2018
    summary :
    This file contains reconstructed global-mean sea level evolution and the estimated contributing processes over 1900-2018. Reconstructed sea level is based on annual-mean tide-gauge observations and uses the virtual-station method to aggregrate the individual observations into a global estimate. The contributing processes consist of thermosteric changes, glacier mass changes, mass changes of the Greenland and Antarctic Ice Sheet, and terrestrial water storage changes. The glacier, ice sheet, and terrestrial water storage are estimated by combining GRACE observations (2003-2018) with long-term estimates from in-situ observations and models. Steric estimates are based on in-situ temperature profiles. The upper- and lower bound represent the 5 and 95 percent confidence level. The numbers are equal to the ones presented in Frederikse et al. The causes of sea-level rise since 1900, Nature, 2020, reformatted to meet the specifications of the JPL PO.DAAC
    id :
    10.5067/GMSLT-FJPL1
    naming_authority :
    gov.nasa.jpl
    source :
    Frederikse et al. The causes of sea-level rise since 1900, Nature, 2020 https://doi.org/10.1038/s41586-020-2591-3
    project :
    NASA sea-level change science team (N-SLCT)
    program :
    NASA sea-level change science team (N-SLCT)
    institution :
    NASA Jet Propulsion Laboratory (JPL)
    references :
    https://doi.org/10.5067/GMSLT-FJPL1,https://doi.org/10.1038/s41586-020-2591-3
    acknowledgement :
    This research was carried out by the Jet Propulsion Laboratory, managed by the California Institute of Technology under a contract with the National Aeronautics and Space Administration.
    processing_level :
    4
    product_version :
    1.0
    license :
    Public Domain
    history :
    This version provides the data as presented in Frederikse et al. 2020.
    Conventions :
    CF-1.7,ACDD-1.3
    keywords :
    EARTH SCIENCE > CLIMATE INDICATORS > ATMOSPHERIC/OCEAN INDICATORS > SEA LEVEL RISE
    keywords_vocabulary :
    GCMD Science Keywords
    standard_name_vocabulary :
    CF Standard Name Table v27
    creator_name :
    Thomas Frederikse
    creator_type :
    person
    creator_url :
    https://sealevel.nasa.gov
    creator_email :
    [email protected]
    creator_institution :
    NASA Jet Propulsion Laboratory (JPL)
    contributor_name :
    Thomas Frederikse, Felix Landerer, Lambert Caron, Surendra Adhikari, David Parkes, Vincent Humphrey, Sönke Dangendorf, Peter Hogarth, Laure Zanna, Lijing Cheng, Yun-Hao Wu
    contributor_role :
    main author,author,author,author,author,author,author,author,author,author,author
    publisher_name :
    Physical Oceanography Distributed Active Archive Center (PO.DAAC)
    publisher_type :
    group
    publisher_url :
    https://podaac.jpl.nasa.gov
    publisher_email :
    [email protected]
    publisher_institution :
    NASA Jet Propulsion Laboratory (JPL)
    geospatial_lat_min :
    -90.0
    geospatial_lat_max :
    90.0
    geospatial_lat_units :
    degrees_north
    geospatial_lon_min :
    -180.0
    geospatial_lon_max :
    180.0
    geospatial_lon_units :
    degrees_east
    time_coverage_start :
    1900-01-01
    time_coverage_end :
    2018-12-31
    time_coverage_duration :
    P119Y
    time_coverage_resolution :
    P1Y
    date_created :
    2020-07-28
    date_modified :
    2020-09-14
In [47]:
plt.rcParams.update({'figure.figsize': (9, 5)})
d4.global_average_sea_level_change.plot()
plt.show()

Il trend della variabile non si discosta troppo da quello della variabile usata in precedenza. Ci accorgiamo però che presenta un andamento meno lineare, soprattutto nell'ultima parte in cui sembrerebbe accellerare, proprio come la variabile relativa alla temperatura conservativa del mare.

In [48]:
# Rimozione warning
pd.options.mode.chained_assignment = None

# Costruzione di un dataset che contenga tutte le variabili
ts_zos2 = ts_zos.drop('zos', axis=1)
ts_zos2 = ts_zos2[50:]
ts_zos2['zos'] = d4.global_average_sea_level_change.values.tolist()[:-4]
# Cambio dell'ordine delle colonne
ts_zos2 = ts_zos2[['zos', 'bigthetaoga', 'simass']]
ts_zos2.head()
Out[48]:
zos bigthetaoga simass
year
1900-12-31 -173.261398 3.975367 108.662781
1901-12-31 -168.801697 3.975936 109.415802
1902-12-31 -180.389999 3.975817 117.218178
1903-12-31 -170.267807 3.974838 117.983482
1904-12-31 -168.720093 3.974608 113.168900

Visualizzazione¶

In [49]:
# Costruzione dataset standardizzato per visualizzazione
ts_zosStd2 = pd.DataFrame(StandardScaler().fit_transform(ts_zos2), columns=ts_zos2.columns)
ts_zosStd2 = ts_zosStd2.set_index(ts_zos2.index)
In [50]:
plt.rcParams.update({'figure.figsize': (9, 5)})
ts_zosStd2.plot()
plt.title("Confronto tra le serie storiche standardizzate delle tre variabili")
plt.show()

Calcolo delle Correlazioni tra le variabili¶

In [51]:
ts_zos2.corr()
Out[51]:
zos bigthetaoga simass
zos 1.000000 0.918667 -0.777208
bigthetaoga 0.918667 1.000000 -0.849646
simass -0.777208 -0.849646 1.000000
In [52]:
# Build the corplot
plt.imshow(ts_zos2.corr(), cmap = 'RdBu_r', interpolation='nearest', vmin=-1)
# Add legend
plt.colorbar()
# Create list with tick_mark positions
tick_marks = [i for i in range(len(ts_zos2.columns))]
# Add the tickmarks at the designated position, using the labels of the dataframe
plt.xticks(tick_marks, ts_zos2.columns, rotation='vertical')
plt.yticks(tick_marks, ts_zos2.columns)
plt.title("Heat-Map della matrice delle correlazioni tra i tre modelli")
plt.show()

Granger Causality Test¶

In [53]:
test = grangercausalitytests(ts_zos2[['zos','bigthetaoga']], 30, verbose=False)
for i in test:
    if test[i][0]['ssr_ftest'][1] < 0.05:
        print('found significant p-value at lag ' + str(i) + ': ' + str(round(test[i][0]['ssr_ftest'][1] , 3)))
found significant p-value at lag 1: 0.01
found significant p-value at lag 12: 0.048
found significant p-value at lag 14: 0.033
In [54]:
test = grangercausalitytests(ts_zos2[['zos','simass']], 30, verbose=False)
for i in test:
    if test[i][0]['ssr_ftest'][1] < 0.05:
        print('found significant p-value at lag ' + str(i) + ': ' + str(round(test[i][0]['ssr_ftest'][1] , 3)))
found significant p-value at lag 20: 0.046
found significant p-value at lag 21: 0.024
found significant p-value at lag 22: 0.025
found significant p-value at lag 23: 0.039

I risultati del Granger Causality Test ottenuti utilizzando la nuova variabile dipendente sono decisamente più interessanti.
Il test trova infatti p-value significativi a ritardi 1, 12 e 14 tra le variabili "zos" e "bigthetaoga". Ciò significa che la temperatura conservativa dei mari è utile a predirre l'innalzamento dei mari a ritardi di 1, 12 e 14 anni.
Per quanto riguarda la variabile "simass", invece, i risultati più interessanti si mostrano a ritardi più elevati. C'è infatti evidenza di una capacità della variabile relativa alla massa di ghiaccio nel mare di predirre l'innalzamento del livello dei mari a ritardi variabili tra 20 e 23 anni.